我想做类似的事情:
[1, 2, 3].map(&:to_s(2))
此外,如何做一些类似的事情:
[1, 2, 3].map(&:to_s(2).rjust(8, '0'))
答案 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