Ruby:如何在eval中使用变量的文字值?

时间:2014-01-19 09:19:09

标签: ruby

我想在我的eval中使用变量的值。我怎么能这样做?

以下代码段:

class Adder
  def initialize(i)
    @i = i
  end

  def method_missing(methodName)
    self.class.class_eval do
        def #{methodName}
          return @i+20
        end
    end
  end
end

在第9行提供错误形式参数不能是实例变量

3 个答案:

答案 0 :(得分:3)

Eval可以接受一个字符串,所以只需构造你想要传递给eval的任何字符串。

myString = "helloworld"
eval <<END
  def #{myString}
     puts "Hello World!"
  end
END

答案 1 :(得分:2)

使用define_method方法在运行时定义方法:

my_string = 'helloworld'
define_method my_string do
  # body of your method
end

如果要将参数传递给新定义的方法,可以通过块参数执行此操作:

define_method 'method_name' do |arg1, arg2|
  # body of your method
end

答案 2 :(得分:1)

对于您的示例,

class Adder
  def initialize(i)
    @i = i
  end

  def method_missing(methodName)
    self.class.send :define_method, methodName do
        return @i+20
    end
      send methodName
  end
end

puts  Adder.new(10).helloworld

这使用您发送的变量作为变量名来定义类中的方法。

以下是一个有效的例子:http://rubyfiddle.com/riddles/e8bf5

相关问题