class A
private
def initialize
puts "wtf?"
end
end
A.new #still works and calls initialize
と
class A
private
def self.new
super.new
end
end
まったく機能しません
では、正しい方法は何ですか?new
プライベートにして、ファクトリメソッドで呼び出したいです。
class A
private
def initialize
puts "wtf?"
end
end
A.new #still works and calls initialize
と
class A
private
def self.new
super.new
end
end
まったく機能しません
では、正しい方法は何ですか?new
プライベートにして、ファクトリメソッドで呼び出したいです。
試したコードの 2 番目のチャンクは、ほぼ正しいものです。問題はprivate
、クラス メソッドではなくインスタンス メソッドのコンテキストで動作していることです。
取得private
またはprivate :new
機能させるには、次のようなクラス メソッドのコンテキスト内に強制する必要があります。
class A
class << self
private :new
end
end
new
または、本当に再定義して呼び出したい場合super
class A
class << self
private
def new(*args)
super(*args)
# additional code here
end
end
end
クラス レベルのファクトリ メソッドは、privatenew
に問題なくアクセスできますが、private を使用して直接インスタンス化しようとするnew
と失敗しますnew
。