我想做的事情如下:
[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)
?
: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)
如果您不需要参数是动态的,您可以执行以下操作:
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)
| 归档时间: |
|
| 查看次数: |
3840 次 |
| 最近记录: |