私はこの厄介な繰り返しのテーマを持っています。たとえば、インスタンスメソッドと保護されたクラスメソッドを定義するクラスがあります。インスタンスメソッドはクラスメソッドを呼び出す必要があります。そのためには、可視性のルールを破り、危険な「送信」機能を使用する必要があります。このようなもの:
class Bang
def instance_bang
self.class.send(:class_band)
end
protected
def self.class_bang
puts "bang"
end
end
クラスメソッドはクラススコープ内で使用する必要があるため、これはひどいことに気づきます。したがって、クラスメソッド内で表示および呼び出し可能のままにする必要があります。「send」関数に依存する必要があり、したがって可視性を壊さないインスタンスメソッドでクラスメソッドを使用する別の方法はありますか?
アップデート:
Sergio Tulentsevの応答(修正のためのthx)に続いて、メソッドの可視性が定義されている範囲内で考慮されているという懸念をまとめたコードスニペットで懸念を更新します。
class Bang
def instance_bang
private_bang = 1
self.private_bang(private_bang)
end
private
def private_bang(p)
puts "bang"
p
end
end
Bang.new.instance_bangを呼び出すと、そのprivate_bang呼び出しでsendを使用しない限り、例外が発生します(今回はチェックしました:))。