3
片段1:這兩個Ruby片段有什麼區別?
module A
def cm(m,ret)
class_eval do
define_method(m.to_sym) do
return ret
end
end
end
end
和代碼段2:
module B
def cm(m,ret)
class_eval do
"def #{m} #{ret} end"
end
end
end
在這些模塊中定義的方法將被用來創建一個類,即返回一定值的方法。這裏有一個例子:
class Whatever
extend A
cm("two",2)
end
,這將創建一個名爲2的方法,將返回2.事情是,在第二個片段的代碼不起作用。任何想法爲什麼?我認爲class_eval
可能需要一個字符串。
我仍然認爲這個定義本身看起來是錯誤的。是不是: 「def#{m}; return#{ret}; end」 – Jean 2010-01-25 09:00:07
@Jean:當表達式是方法中的最後一個時,return關鍵字是可選的。所以在結束關鍵字之前或者在方法定義的參數列表之後是終止符。即'def five()5 end'是有效的語法。然而'def five 5 end'不是。 – sepp2k 2010-01-25 09:54:16