如何使用字符串而不是符号来表示`Symbol#to_proc`

时间:2012-10-10 14:21:38

标签: ruby symbols implicit-conversion proc

a = (1..10).to_a
a.map(&:even?)
=> [false, true, false, true, false, true, false, true, false, true]

如何使用包含方法名称的字符串调用map?

foo = 'even?'
a.map(...foo...)

3 个答案:

答案 0 :(得分:4)

foo = 'even?'
[1,2,3,4,5].map(&foo.to_sym)
 => [false, true, false, true, false]

答案 1 :(得分:2)

简写语法不是&符号,它是&符号,后跟符号:

(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?"

答案 2 :(得分:1)

另一种选择,它使用“完整形式”块并且更通用。

a = (1..10).to_a
name = 'even?'
a.map{|b| b.send name} # => [false, true, false, true, false, true, false, true, false, true]