Issue #16500 has been updated by Eregon (Benoit Daloze).


mame (Yusuke Endoh) wrote:
> * The behavior of `args = [1, 2, -> {}]; foo(   *args, &args.pop)` should pass `[1, 2, ->{}]`, and we should fix the bug on the ruby interpreter.

Why is that better than the previous behavior?
Changing that will be more incompatible.


----------------------------------------
Bug #16500: Argument is added to both splat and last &block argument
https://bugs.ruby-lang.org/issues/16500#change-83802

* Author: anatolik (Anatol Pomozov)
* Status: Open
* Priority: Normal
* Assignee: ioquatix (Samuel Williams)
* Target version: 
* ruby -v: 2.7.0
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
Here is a followup for a ruby2.7 issue discussed here https://gitlab.com/groups/gitlab-org/-/epics/2380

I run gitlab with ruby2.7. gitlab/lib/api/api_guard.rb calls Rack's `use` method:


```ruby
use Rack::OAuth2::Server::Resource::Bearer, 'The API' do |request|
  # The authenticator only fetches the raw token string

  # Must yield access token to store it in the env
  request.access_token
end
```

The `use` method looks like:

```ruby
def use(middleware, *args, &block)
  if @map
    mapping, @map = @map, nil
      @use << proc { |app| generate_map app, mapping }
  end
  @use << proc { |app| middleware.new(app, *args, &block) }
end
```

For some reason, a `Proc` object was set to `&block` *and* added to `args`. It sounds wrong. A `Proc` should only be set to `&block`, and `args` should contain only one argument.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>