比方說,我有一個類:紅寶石:創建一個不繼承類方法
class Person
def self.say
puts "hello"
end
end
而且一個子類:
class Woman < Person
end
我想「說」的方法是公開的方法,但我不希望它被「女人」或任何其他子類繼承。什麼是實現這一目標的正確途徑?
- 我不想重寫該方法,因爲我不知道未來的子類。
- 我知道我可以使用類似
remove_method
,但我寧願在所有
比方說,我有一個類:紅寶石:創建一個不繼承類方法
class Person
def self.say
puts "hello"
end
end
而且一個子類:
class Woman < Person
end
我想「說」的方法是公開的方法,但我不希望它被「女人」或任何其他子類繼承。什麼是實現這一目標的正確途徑?
remove_method
,但我寧願在所有我同意這是一個奇怪的規定,以不繼承方法。但是如果你堅持,你可以爲Person
創建一個inherited
鉤子並手動從子類中移除類方法。
class Person
def self.say
puts "Hello"
end
def self.inherited(subclass)
self.methods(false).each do |m|
subclass.instance_eval { eval("undef :#{m}") }
end
end
end
class Woman < Person
end
Person.say #=> Hello
Woman.say #=> undefined method `say' for Woman:Class (NoMethodError)
這是我不想做的事情。 (民主/ remove_method)。我寧願不繼承它! – benams
@benams你應該去找其他一些語言:-) –
我想在基類的一個靜態方法,即找到一個子類,根據我供應
定義一個靜態方法在其他地方,例如在模塊中的參數:
module Person
class Base
end
class Woman < Base
end
def self.create(name)
case name
when :woman
Woman.new
end
end
end
Person.create(:woman) # => #<Person::Woman:0x007fe5040619e0>
Person::Woman.create(:woman) # => undefined method `create' for Person::Woman:Class
這是你在那裏做的一些奇怪的OOP。 –
你想達到什麼目的? – Gerep
我想在基類中有一個靜態方法,它根據我提供的參數找到一個子類@Gerep – benams