すべてのメソッドに基づいて、'hello' という言葉を追加するだけの簡単なコールバック関数を書きたいと思います。「エイリアス」を学んだばかりなので、この機能を試してみたいと思います。コードは次のとおりです。
a = []
class << a
Array.instance_methods(false).each do |meth|
alias_method :old_meth, meth
define_method(meth) do |*args, &block|
old_meth *args, &block
puts "hello"
end
end
end
a.push "good"
コードの実行中に、次のエラーが発生します。
DRBServer.rb:6:in `pack': too few arguments (ArgumentError)
次に、「pack」関数が原因だと思うので、「pack」関数を次のようにフィルタリングします。
Array.instance_methods(false).each do |meth|
if meth != :pack
....
end
次に、別の関数「drop_while」について不平を言います...
DRBServer.rb:7:in `drop_while': wrong number of arguments(1 for 0) (ArgumentError)
問題はパラメーター (*args、&block) を渡す方法にあるに違いないことはわかっていますが、この方法を使用して 1 つのメソッドにパラメーターを渡すだけであれば、正しく機能します。次のように:
a = []
class << a
alias_method :old_push, :push
define_method("push") do |*args, &block|
old_push *args, &block
puts "hello"
end
end
a.push "good" => [output "hello"]
私は本当に混乱しており、あなたの助けに感謝しています. ありがとう。