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

Ale*_*pov 9 ruby syntax

我想做的事情如下:

[1, 2, 3].map(&:to_s(2))
Run Code Online (Sandbox Code Playgroud)

另外,如何做类似的事情:

[1, 2, 3].map(&:to_s(2).rjust(8, '0'))
Run Code Online (Sandbox Code Playgroud)

Aru*_*hit 6

:to_s是一种符号,而不是一种方法.所以你不能像它那样传递任何论据:to_s(2).如果你这样做,你会收到错误.这就是你的代码不能工作的方式.所以[1, 2, 3].map(&:to_s(2))尽可能[1, 2, 3].map(&:to_s)不可能.&:to_s意味着你#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
       ^
Run Code Online (Sandbox Code Playgroud)

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

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

syntax error, unexpected '(', expecting ')'
[1, 2, 3].map(&:to_s(2))
                     ^
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 5

如果您不需要参数是动态的,您可以执行以下操作:

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

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

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