如何在以下情况下传递参数名称...在传递给class_eval之前评估名称
class Foo
end
Foo.class_eval %Q{
def hello(name)
p "hello #{name}"
end
}
很抱歉没有给出整个场景...... 我只想动态地向一个类添加一个实例方法,该方法应该能够接受参数... 上面的代码不会编译抱怨在irb ..执行时没有将名称定义为局部变量。
由于
答案 0 :(得分:3)
其他答案是“正确”答案,但您也可以跳过p
来电内插:
Foo.class_eval %Q{
def hello(name)
p "hello \#{name}"
end
}
我认为您想要更改实际参数名称(可能对完成或在动态方法上使用Pry时有用),这里假设它在全局中,但也可以传递给执行class_eval
的方法:
Foo.class_eval %Q{
def hello(#{$argname})
p "hello \#{$argname}"
end
}
答案 1 :(得分:1)
非常简单:
Foo.class_eval do
def hello(name)
p "hello #{name}"
end
end
答案 2 :(得分:0)
尝试将块传递给class_eval
而不是数组(from this link):
class Foo
end
Foo.class_eval {
def hello(name)
p "hello #{name}"
end
}
然后,您可以通常的方式调用实例方法hello
:
boo = Foo.new
boo.hello("you")
产生:
>> boo.hello("you")
"hello you"
=> nil
答案 3 :(得分:0)
class Foo
end
Foo.class_eval do
define_method :hello do |name|
p "hello #{name}"
end
end
Foo.new.hello("coool") # => "hello coool"