send不适用于ruby中的lambda:

>> def mymethod; end
=> :mymethod
>> send('mymethod')
=> nil

>> mylambda = ->{}
=> #<Proc:0x9f2fe28@(pry):136 (lambda)>
>> send('mylambda')
=> NoMethodError: undefined method `mylambda' for main:Object

如何通过字符串动态调用lambda?

最佳答案

如果不使用eval,则无法按名称访问局部变量。
您可以尝试以下几种选择:
将lambda存储在Hash中:

hash = {
  'mylambda' => ->{ 'foo' }
}
hash['mylambda'].call # => "foo"

将lambda存储在实例变量中:
@mylambda = ->{ 'foo' }
instance_variable_get('@mylambda').call # => "foo"

使用lambda创建临时方法
mylambda = ->{ 'foo' }
define_method :temp, &mylambda
send(:temp) # => "foo"

10-04 21:40