9

我想做类似的事情:

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

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

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

?

4

2 回答 2

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
       ^

现在试试你的,并将错误与上述解释进行比较:

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

syntax error, unexpected '(', expecting ')'
[1, 2, 3].map(&:to_s(2))
                     ^
于 2013-11-08T10:18:25.677 回答
6

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

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
于 2013-11-08T11:00:20.133 回答