Estender o método send da classe Object - ruby

Eu quero mudar o método de envio em Ruby. Meu código é como segue

class A
def send(symbol, *args)
#customize code here
#finally call the orinial __send__ function
__send__(symbol, args)
end
end

No entanto, quando eu chamo a função send como obj.send ("a_var =", 10), recebi este erro:

ArgumentError: wrong number of arguments (1 for 0)

O erro está na chamada de linha __ função send__. Então, como posso corrigir esse erro?

Respostas:

1 para resposta № 1

Se você quiser passar o *args através do __send__ chamar como argumentos individuais em vez de uma matriz, você precisa desconstruí-lo lá também:

__send__(symbol, *args)

1 para resposta № 2

Para mim seu código está ok:

class A
def send(symbol, *args)
#customize code here
#finally call the orinial __send__ function
p "this method has been called"
__send__(symbol, args)
end
def show=(m)
p m
end

end

A.new.send("show=",1,3,4)
A.new.send("show=",1)
A.new.send(:show=,1)

Saída:

"this method has been called"
[1, 3, 4]
"this method has been called"
[1]
"this method has been called"
[1]

Cardápio