a = (1..10).to_a
a.map(&:even?)
=> [false, true, false, true, false, true, false, true, false, true]
如何使用包含方法名称的字符串调用 map?
foo = 'even?'
a.map(...foo...)
a = (1..10).to_a
a.map(&:even?)
=> [false, true, false, true, false, true, false, true, false, true]
如何使用包含方法名称的字符串调用 map?
foo = 'even?'
a.map(...foo...)
foo = 'even?'
[1,2,3,4,5].map(&foo.to_sym)
=> [false, true, false, true, false]
速记语法不是 & 冒号,它是 & 后跟一个符号:
(1..10).map(& :even?)
在 Ruby 中,方法通常由符号引用,因此如果变量中有符号,则此语法按预期工作:
name = :even?
(1..10).map(&name)
如果您无法控制变量方法名称,例如它是一个参数,我建议您改用通用方法send
。它适用于符号和字符串。
def perform enum, name
enum.each{ |e| e.send(name) }
end
perform 1..10, "even?"
另一种选择是,它使用“完整形式”块并且更通用。
a = (1..10).to_a
name = 'even?'
a.map{|b| b.send name} # => [false, true, false, true, false, true, false, true, false, true]