Si vous avez vraiment besoin d' send
, pour se comporter comme il le ferait normalement, vous devez utiliser __send__
, car il n'est pas (ne devrait pas) être surchargée. À l'aide de __send__
est particulièrement utile dans la métaprogrammation, lorsque vous ne savez pas quelles sont les méthodes de la classe en cours de manipulation définit. Il pourrait avoir remplacé send
.
Regarder:
class Foo
def bar?
true
end
def send(*args)
false
end
end
foo = Foo.new
foo.send(:bar?)
# => false
foo.__send__(:bar?)
# => true
Si vous substituez __send__
, Ruby va émettre un avertissement:
avertissement: la redéfinition `__envoyez__ " peut
causer de graves problèmes
Certains cas où il serait utile de remplacer send
, lorsque ce nom est approprié, comme la transmission de messages, prise de classes, etc.