给对象发送方法另一个方法块

Giving object's send-method an other method with block

这个有效:

Beer.all.send(:sort)

它也适用于方块:

Beer.all.sort_by{|b| b.name}
Beer.all.sort_by(&:name)

但是当我像这样给发送方法一个可执行块时:

Beer.all.send(:sort_by{|b| b.name})
Beer.all.send(:sort_by(&:name))

我收到语法错误。在 Ruby 中是否有其他方法可以将可执行块提供给发送方法?

你应该尝试类似的方法:

Beer.all.send(:sort_by) {|b| b.name}

块是Ruby中的特殊参数,它们不会与括号内的常规参数一起传递。这与 send 没有任何特别的关系。 send 和其他方法一样只是一种方法,毕竟它不能改变 Ruby.

的语法

块在所有其他参数之后传递,即像这样:

foo.bar(baz, qux) {|sillyname| do_stuff }