хорошие знания, спасибо!
========================

имаю концепцию`some_instance.send` но я пытаюсь понять, почему вы можете назвать это обоими способами. Рубиновые коаны подразумевают, что есть не только множество разных способов сделать то же самое. Вот два примера использования:

У кого-нибудь есть идеи по этому поводу?

 класс сокетов стандартной библиотеки) определяют свои собственные`send` метод, который не имеет ничего общего с`Object#send`, Так что если вы хотите работать с объектами любого класса, вам нужно использовать`__send__` быть на безопасной стороне.

Теперь это оставляет вопрос, почему есть`send` и не только`__send__`, Если бы были только`__send__` название`send` могут быть использованы другими классами без путаницы. Причина в том, что`send` существовал первым и только потом стало понятно, что название`send` может также использоваться в других контекстах, поэтому`__send__` был добавлен (это то же самое, что случилось с`id` а также`object_id` Кстати).



 что другие уже сказали вам, и что сводится к тому, чтобы сказать, что`send` а также`__send__` два псевдонима одного и того же метода, возможно, вас заинтересует третья, немного отличающаяся возможность,`public_send`, Пример:

Обновление: начиная с Ruby 2.1,`Module#include` а также`Module#extend` методы становятся общедоступными, поэтому приведенный выше пример больше не работает.



действительно нужно`send` чтобы вести себя как обычно, вы должны использовать`__send__`потому что он не будет (не должен) переопределяться. С помощью`__send__` особенно полезен в метапрограммировании, когда вы не знаете, какие методы определяет управляемый класс. Это могло бы переопределить`send`.

Часы:

Если вы переопределите`__send__`Руби выдаст предупреждение:

предупреждение: переопределение `\_\_send\_\_ 'может вызвать серьезные проблемы

В некоторых случаях было бы полезно переопределить`send` было бы там, где это имя подходит, например, передача сообщений, классы сокетов и т. д.



`__send__` существует, поэтому он не может быть переписан случайно.

Почему`send` существует: я не могу говорить за кого-то еще, но`object.send(:method_name, *parameters)` выглядит лучше, чем`object.__send__(:method_name, *parameters)`вот и пользуюсь`send` если янужно использовать`__send__`.