[英]class_eval how to pass parameter to method
如何在以下情况下传递参数名称...在传递给class_eval之前评估名称
class Foo
end
Foo.class_eval %Q{
def hello(name)
p "hello #{name}"
end
}
抱歉没有给出整个场景......我只想动态地向一个类添加一个实例方法,该方法应该能够接受参数...上面的代码不会编译抱怨名称没有被定义为局部变量在执行irb ..
谢谢
其他答案是“正确”答案,但您也可以跳过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
}
真的很简单:
Foo.class_eval do
def hello(name)
p "hello #{name}"
end
end
尝试将块传递给class_eval
而不是数组( 来自此链接 ):
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
class Foo
end
Foo.class_eval do
define_method :hello do |name|
p "hello #{name}"
end
end
Foo.new.hello("coool") # => "hello coool"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.