我想做类似的事情:
[1, 2, 3].map(&:to_s(2))
另外,如何做类似的事情:
[1, 2, 3].map(&:to_s(2).rjust(8, '0'))
?
: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
^
现在试试你的,并将错误与上述解释进行比较:
[1, 2, 3].map(&:to_s(2))
syntax error, unexpected '(', expecting ')'
[1, 2, 3].map(&:to_s(2))
^
如果您不需要参数是动态的,您可以执行以下操作:
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