这个有效:
Beer.all.send(:sort)
并且它也适用于块:
Beer.all.sort_by{|b| b.name}
Beer.all.sort_by(&:name)
但是当我给这样的send-method提供一个可执行块时:
Beer.all.send(:sort_by{|b| b.name})
Beer.all.send(:sort_by(&:name))
我收到语法错误。 Ruby中是否有任何替代方法可以为send-method提供可执行块?
答案 0 :(得分:5)
你应该尝试类似的东西:
Beer.all.send(:sort_by) {|b| b.name}
答案 1 :(得分:1)
块是Ruby中的特殊参数,它们不与括号内的常规参数一起传递。这与send
没有任何关系。 send
只是一个像任何其他方法一样的方法,毕竟它不能改变Ruby的语法。
在所有其他参数之后传递块,例如:
foo.bar(baz, qux) {|sillyname| do_stuff }