我想在我的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行提供错误形式参数不能是实例变量
答案 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