Ruby: 継承不可能なクラスメソッドを作成する
概要
クラスがあるとしましょう:
class Person
def self.say
puts "hello"
end
end
そしてサブクラス:
class Woman < Person
end
「say」メソッドをパブリック メソッドにしたいのですが、「Woman」または他のサブクラスに継承されたくありません。それを達成するための正しい方法は何でしょうか?
解決策
その静的メソッドを別の場所、たとえばモジュール内に定義します。
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