[英]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.