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"