新しい Listener クラスを作成して、メソッドが別のメソッドをトリガーする方法を見つけようとしています。コードを単純化し、コールバック メソッドやトリガー メソッドに固有のものを追加しないようにしたいと考えています。基本的に、私がやろうとしていることはこれです:
def level_up
level += 1
end
def print_level
puts "Level Up! (#{level})"
end
notify_level = Listener.new(:level_up, :print_level);
私のリスナークラスは(現在)これです:
# Listener.new(attached_to, callbacks)
class Listener
def initialize(attached_to, function)
@owner, @callback = attached_to, function
end
def owner
@owner
end
def callback
@callback
end
def trigger
# execute callback manually
self.method(@owner).call
self.method(@callback).call
end
end
両方を呼び出すには、notify_level.trigger
それ自体を実行する必要がありますが、実行して呼び出す必要がlevel_up
ありますprint_level
。誰かがオブザーバーについて言及することは知っていますが、それ以上のことが必要です。DRYをしっかりと持ちたい。オブザーバーとリスナーをすべてのメソッドに手動で追加するのは、特に簡単に追加または削除できないため、ひどいものです。