Я не могу комментировать из-за низкой репутации: /.
Переопределение send бесполезно, потому что send - это просто общее имя для __ send __ (это подчеркивание, подчеркивание, «send», подчеркивание, подчеркивание), который является методом, фактически реализующим отправку сообщения. Переопределение любого метода __ __ не рекомендуется. Кроме того, другой человек также может снова открыть класс и отменить определение:
class Widget
def send(method, *args, &block)
super
end
#and so on
end
В Ruby 1.9 поведение немного отличается: #send фактически учитывает видимость, __ send __ нет.
private в Ruby имеет больше декларативную цель: методы, объявленные как private, являются деталями реализации, а не API. Вы не можете отправить сообщение извне случайно. Но любой может все же принудительно обойти это ограничение, если сочтет нужным - за свой счет.