给定一个数组myarr和数组foo的每个元素都能理解的方法,我可以通过以下方式生成一个新数组:
mapper = :foo
newarr = myarr.map(&mapper)
Run Code Online (Sandbox Code Playgroud)
因为&快捷方式将存储的符号mapper转换为Proc.
假设mapper不是Symbol,但已经是一个Proc实例.这个,然后:
mapper = :foo.to_proc
newarr = myarr.map(mapper)
Run Code Online (Sandbox Code Playgroud)
引发错误,因为Array#map不接受参数.
我当然可以这样做:
newarr = myarr.map {|x| mapper.call(x)}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一个&:foo我可以在这里使用的快捷方法(类似).
做就是了:
newarr = myarr.map(&mapper)
Run Code Online (Sandbox Code Playgroud)
甲Proc实例是一个对象,而块是不是对象.它们不可互换.你需要使用一个转换为另一个&.如果mapper是符号,则&in 的效果&mapper不仅仅是转换mapper为Proc实例; 这只是转换/解释mapper为/作为块的过程的一部分.当mapper已经是一个Proc实例时,这没有什么不同; 只是这个将其转换为Proc实例的中间步骤变得微不足道.
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |