Почему Ruby использует response_to? вместо responses_to?

Мне любопытно, почему метод Ruby, связанный с самоанализом, чтобы проверить, отвечает ли объект методу, равен respond_to? вместо responds_to?

Мне всегда это кажется неуклюжим, но, может быть, это потому, что я привык к respondsToSelector в Objective-C.


person Nick    schedule 12.03.2011    source источник
comment
Может быть, он пытается быть императивным: эй, вы возражаете, ОТВЕЧАЙТЕ!   -  person julx    schedule 12.03.2011
comment
Не могу поверить, что этот вопрос не задавали раньше!   -  person Andrew Grimm    schedule 12.03.2011


Ответы (2)


Мац предпочитает второе лицо единственного или третьего лицо во множественном числе:

"отвечает_на?" вероятно, имеет больше смысла для англоговорящих, чем «respond_to?».

Может быть. Но я японец. Руби не английский. Это основное правило именования, позволяющее избегать формы единственного числа от третьего лица в стандартных библиотеках.

  you = Human.new
  if you.respond_to?(:knock)
    ...
  end
person Andrew Grimm    schedule 12.03.2011
comment
Я считаю, что дело не в том, что Мац предпочитает второе лицо единственного или третьего лица множественного числа, но он предпочитает форму глагола по умолчанию (до менее инфинитива). - person sawa; 12.03.2011
comment
@sawa нравится словарная форма (если это правильный термин для 辞書形) японских глаголов? - person Andrew Grimm; 11.04.2013
comment
да. Но в японском языке нет соглашения о человеке и числе, поэтому в японском нет никакой разницы. Обычно его называют 終止形 (форма окончания). - person sawa; 11.04.2013
comment
Почему не одновременно respond_to? и responds_to?? В Ruby есть множество методов с такими псевдонимами. - person Nate; 07.02.2014
comment
@Nate Почему бы не responding_to?, responded_to? в дополнение к этому? - person sawa; 20.06.2015
comment
@Sawa, для меня это больше похоже на имена обработчиков событий. - person Nate; 22.06.2015
comment
Нет никакой гарантии, что подлежащее перед respond_to стоит в единственном числе. Это может быть коллекция (например, Array, Set). Так что пытаться достичь грамматического согласия бессмысленно. respond_to короче responds_to. Так зачем ввязываться в спряжение глаголов, которое характерно только для некоторых естественных языков? - person Zack Xu; 31.07.2015
comment
У меня возникли проблемы с придумыванием конструкции на английском языке, где responds_to? действительно имеет смысл и является правильным. Грамматически правильно: respond_to? :bar; Есть ли foo respond_to :bar?. Только путем преобразования изъявительного Foo responds_to :bar в суррогатное вопросительное — Foo responds_to :bar? имеет ли это какой-либо смысл, и это определенно позволяет вольничать с языком. Короче говоря, respond_to? было бы правильно, даже если бы главным соображением было сходство с англичанами. - person Christopher Swasey; 10.10.2015
comment
Я всегда думаю в своей голове [подождите!] foo responses_to :bar??? это правильно построенный разговорный английский, но только если вы интонируете фразу в форме вопроса. Полезно помнить, что это короче без 's', и поэтому, возможно, мне не придется снова гуглить :) - person Ninjaxor; 17.11.2015
comment
@ChristopherSwasey Наиболее частое использование этого метода у меня выглядит так: if my_object.respond_to?(:with_indifferent_access) ... else ... end. Ясно, что responds_to здесь грамматически правильнее. Однако я понимаю логику Маца - person Devon Parsons; 25.05.2016
comment
вы.отвечает_кому? во всяком случае имеет больше смысла. Руби понял это неправильно. - person Gambai; 23.03.2017

Откуда вы знаете, что получатель всегда в третьем лице единственного числа? Возможно, получателем будет I, we, you или they, или что-то другое, представляющее множественность. В таком случае вы по-прежнему будете говорить, что responds_to? естественнее, чем respond_to?? Чтобы сохранить общность, лучше называть метод в как можно более общей форме. Вместо того, чтобы называть метод в третьем лице единственного числа, имеет смысл назвать его в форме по умолчанию, to-less инфинитива, которая также используется в словарях.

person sawa    schedule 12.03.2011
comment
Наверное, я всегда думаю о ресивере как об «этом». - person nroose; 20.06.2015