如何在以下case..the名传递参数名正在被传递给class_evalclass_eval如何参数传递给方法
class Foo
end
Foo.class_eval %Q{
def hello(name)
p "hello #{name}"
end
}
很抱歉没有给整个方案之前评估.. 我只是想动态地给一个类添加一个实例方法,并且该方法应该能够引用参数... 上面的代码不会编译抱怨在irb中执行时没有将该名称定义为本地变量..
谢谢
如何在以下case..the名传递参数名正在被传递给class_evalclass_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
}
我想你想改变的实际参数名称(完成或可能有用的采用动态方法撬)时,这里假设它是在一个全球性的,但也可以传递到做一个方法class_eval
:
Foo.class_eval %Q{
def hello(#{$argname})
p "hello \#{$argname}"
end
}
谢谢...它的工作原理... – coool
@coool其他人也;)他们是也许更好的答案;清洁器。 –
真正简单:
Foo.class_eval do
def hello(name)
p "hello #{name}"
end
end
尝试传递一个块到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
我想传递一个字符串/创建一个新的方法字符串..感谢你回答 – coool
不知道你在问什么;你想改变参数的名字为'hello'?哦,我明白了 - 答案是最简单的解决方案。 –
你的问题几乎没有一致 – horseyguy