對Ruby的安靜新我找不出什麼東西。 下面是一個示例代碼Ruby嘗試以編程方式避免子類中的多重定義
class Big
def self.metaclass; class << self; self; end; end
def self.convertor b
metaclass.instance_eval do
define_method(:convert) do |val|
return b val
end
end
end
end
class Small < Big
convertor { |v| v.to_i + 1 }
end
puts Small.convert('18')
目的是有很多子類來大的,我喜歡以避免在每個
def convert(val)
return conversion_specific_to_subclass(val)
end
定義做前一種方法,我只是爲每個一行子類。但不能讓它工作。 我在做什麼錯了?有沒有更好的方法來實現我所希望的?
在此先感謝
編輯:問這裏是錯誤的代碼產生(紅寶石2.1.0)
test2.rb:4:in `convertor': wrong number of arguments (0 for 1) (ArgumentError)
from test2.rb:14:in `<class:Small>'`
你是什麼意思「不起作用」?有錯誤嗎?其他輸出?請更具體一些。 – Linuxios
使用amperstamp(b&)我然後有:test2.rb:14:'':未定義的方法'轉換器'爲Small:Class(NoMethodError)希望它會幫助;) –
zedryas