M
このモジュールに混在するクラスが特定のメソッド名が特別かどうかをチェックできるように、特定のメソッドに「特別」のタグを付けたいモジュールがあります。これは私が試したことです:
module M
def specials
@specials ||= {}
end
def self.special name
specials[name] = true
end
def is_special? name
specials[name]
end
def meth1
...
end
special :meth1
end
class C
include M
def check name
is_special? name
end
end
クラスメソッドからインスタンスメソッドを呼び出すことができないため、もちろんこれは機能しませんself.special
。モジュール内の必要なメソッドの下で呼び出すことができるという機能を保持したい場合はspecial :<name>
、クラス変数を使用するしかないと思います (例:@@specials
誰かが私が間違っていることを証明できますか?)