だから私は宝石を作っていて、すでにそれについて素晴らしい意見を持っています。残念ながら、かなり重大なバグがあります。この gem は、コールバックをアタッチできるイベントを作成しますが、残念ながら、クラスの public_methods の 1 つと同じ名前のコールバックまたはイベントがある場合、バグが発生します。下にいくつかのテストコードがある宝石のバグの実際の例を次に示します。
# Portion of gem that causes bug
class DemoClass
def initialize method_symbol
@method = to_method(method_symbol)
end
def call(*args)
@method.call(*args)
end
def some_private_method
puts 'the private method was called (still bugged)'
end
private
def to_method(method_symbol)
# this right here references public methods when I don't want it to
method(method_symbol)
end
end
# Outside the gem
def some_method
puts 'this is an original method being called'
end
def some_private_method
puts 'the private method was NOT called. Bug fixed!'
end
non_bugged_instance = DemoClass.new(:some_method)
bugged_instance = DemoClass.new(:some_private_method)
non_bugged_instance.call
bugged_instance.call
public method を参照するのではなく、そのクラスの外部にあるメソッドを参照するto_method
シンボルを使用して、プライベートメソッドにメソッドオブジェクトを作成させる方法はありますか?:add
add