给对象发送方法另一个方法块
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 }
这个有效:
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 }