Array#map如何使用参数来做这样的事情?
def double(a) a*2 end method_object = method(:double)
这是我的问题,这段代码怎么样:
[1,3,5,6].map(&method_object)
达到同样的效果
[1,3,5,6].map {|x| method_object.call(x)}
在Ruby文档中,Array#map只能有块,而不是普通参数
ary.collect {|item| block } → new_ary ary.map {|item| block } → new_ary ary.collect → an_enumerator ary.map → an_enumerator
简单地说,&符号用于将方法对象“打包/解包”到块中,因此效果与传递块的效果相同。
您可以通过以下方式“获取”已传递给您的方法的块:
def method_with_block(&foo) # do something here foo.call # do something else end
这类似于调用yield
而不是声明&foo
作为参数。 我认为这两种方法之间的约束可能不同,但在大多数情况下,效果就是你所期望的(如果我弄错了,请更正)。
当然,&符号反过来 – 如果一个方法需要一个块并且你有一个proc对象,你可以简单地用&
前缀它,就像你写的那样。 更确切地说, &
调用传递对象的to_proc
方法(Rails以类似于本条目中描述的关于to_proc的方式使用它。
我希望这能解决你的一些疑虑。 如果我写的内容有误,请随时纠正。
你可能觉得有用的读物:
- 编程Ruby ,必备书
- Wikibooks包含有关此主题的部分
- 这个简单的博客条目显示了一个例子
你可以扩展类整数:
class Integer def double self*2 end end [1,2,3,4].map(&:double) [ [0] 2, [1] 4, [2] 6, [3] 8 ]
- 与Ruby和EM :: WebSocket :: Server的WebSocket握手
- 从视图中的不同视图访问图像与回形针gemruby在铁轨上
- Ruby在Object中寻找类变量而不是特定的类
- 如何使注册页面成为Devise的根页面?
- 在使用Ruby on Rails ActiveSupport :: Concernfunction时如何“嵌套”模块的包含?
- 是否可以使用RMagick获得平均图像颜色?
- 添加@ article.comments.size时,Rails“未定义的方法’名称’为nil:NilClass”错误
- Nokogiri HTML解析不起作用
- MongoDB Group使用Ruby驱动程序