是否可以在参数中使用&amp ;:(&冒号)表示法或在Ruby中使用链接?

时间:2013-11-08 10:05:47

标签: ruby syntax

我想做类似的事情:

[1, 2, 3].map(&:to_s(2))

此外,如何做一些类似的事情:

[1, 2, 3].map(&:to_s(2).rjust(8, '0'))

2 个答案:

答案 0 :(得分:5)

:to_s是符号,而不是方法。所以你不能像:to_s(2)那样传递任何参数。如果你这样做,你就会收到错误。这就是你的代码不能工作的方式。所以[1, 2, 3].map(&:to_s(2))是不可能的,[1, 2, 3].map(&:to_s)可能在哪里。&:to_s表示你正在调用{{1}符号上的方法。现在,在您的情况下,#to_proc表示&:to_s(2)。在调用方法:to_s(2).to_proc之前将发生错误。

#to_proc

现在尝试一下,并将错误与上述说明进行比较:

:to_s.to_proc # => #<Proc:0x20e4178>
:to_s(2).to_proc # if you try and the error as below

syntax error, unexpected '(', expecting $end
p :to_s(2).to_proc
       ^

答案 1 :(得分:5)

如果你不需要参数是动态的,你可以这样做:

to_s2 = Proc.new {|a| a.to_s(2)}
[1, 2, 3].map &to_s2

对于你的第二个例子,它将是:

to_sr = Proc.new {|a| a.to_s(2).rjust(8, '0')}
[1, 2, 3].map &to_sr