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"
关于ruby - `send` 替代 Ruby 中的 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091899/