10783


[1, 1].map(&:to_i)などはうまくいくんですが、  
[1, 1].map(&:*2)だと、エラーが出ます。

SyntaxError: unexpected tINTEGER, expecting ')'


CC BY-SA 3.0
2015-05-30T01:20:43.717
10782
2015-05-30T03:42:12.417
9596
question
ruby
[1, 1].map(&:*2)が動かないのはなぜ？


`&:シンボル`はインスタンスメソッドを呼び出すProcオブジェクトを返す`to_proc`を呼び出すが、 (つまり`&:*2.to_proc`)  
まず、`:*2` がシンボルとして解釈しようとして失敗する。  
エラーメッセージはそのためだと思われます。  
それで、`:"*2"`としてみたらシンボルとしては有効ですが、  
`*2`というメソッドが`Integer`にないので失敗する。

代替として

[code]

    mul = -> x, y { x * y }
    arr2 = [1,1].map(&mul.curry.(2))
    
[/code]

ではどうでしょう？


CC BY-SA 3.0
2015-05-30T01:33:10.477
10783
2015-05-30T03:42:12.417
2015-05-30T03:42:12.417
5044
5044
10782
answer