[#83107] Alias Enumerable#include? to Enumerable#includes? — Alberto Almagro <albertoalmagro@...>

Hello,

9 messages 2017/10/04

[ruby-core:83117] [Ruby trunk Feature#12115] Add Symbol#call to allow to_proc shorthand with arguments

From: knu@...
Date: 2017-10-05 03:35:42 UTC
List: ruby-core #83117
Issue #12115 has been updated by knu (Akinori MUSHA).


Wouldn't Array#to_proc make sense?

```ruby
class Array
  def to_proc
    proc { |x| x.__send__(*self) }
  end
end

[100, 200, 300].map(&[:to_s, 16])
# => ["64", "c8", "12c"]
```


----------------------------------------
Feature #12115: Add Symbol#call to allow to_proc shorthand with arguments
https://bugs.ruby-lang.org/issues/12115#change-67058

* Author: felixbuenemann (Felix B端nemann)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
I am a great fan of the `Symbol#to_proc` shorthand when mapping or reducing collections:

```ruby
[1,2,16].map(&:to_s)
=> ["1", "2", "16"]
[1,2,16].reduce(&:*)
=> 32
```

I often wish it would be possible to pass an argument to the method when doing this, which currently requires a block and is more verbose:

```ruby
[1,2,16].map { |n| n.to_s(16) }
=> ["1", "2", "10"]
# active_support example
{id: 1, parent_id: nil}.as_json.transform_keys { |k| k.camelize :lower }.to_json
=> '{"id":1,"parentId":null}'
```

It would be much shorter, if ruby allowed this:

```ruby
[1,2,16].map(&:to_s.(16))
=> ["1", "2", "10"]
# active_support example
{id: 1, parent_id: nil}.as_json.transform_keys(&:camelize.(:lower)).to_json
=> '{"id":1,"parentId":null}'
```

This can be implemented easily, by adding the `Symbol#call` method:

```ruby
class Symbol
  def call(*args, &block)
    ->(caller, *rest) { caller.send(self, *rest, *args, &block) }
  end
end

```

*Source*: [stackoverflow: Can you supply arguments to the map(&:method) syntax in Ruby?](http://stackoverflow.com/questions/23695653/can-you-supply-arguments-to-the-mapmethod-syntax-in-ruby)

**I think this is a rather common use case, so I propose to add `Symbol#call` to the Ruby standard library.**



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

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

In This Thread

Prev Next