为什么Ruby使用respond_to?而不是responds_to?

Nic*_*ick 41 ruby introspection naming-conventions

我很好奇为什么Ruby的内省相关方法来检查对象是否响应方法respond_to?而不是responds_to?

这对我来说似乎总是很尴尬,但也许那是因为我习惯于respondsToSelector客观c.

And*_*imm 71

Matz 喜欢第二人称单数或第三人称复数:

"responds_to?" 英语使用者可能比"respond_to?"更有意义.

也许.但我是日本人.Ruby不是英语.这是在标准库中避免第三人称单数形式的基本命名规则.

  you = Human.new
  if you.respond_to?(:knock)
    ...
  end
Run Code Online (Sandbox Code Playgroud)

  • @ChristopherSwasey 我对该方法最常见的用法是这样的:`if my_object.respond_to?(:with_indifferent_access) ... else ... end`。很明显,这里的“responds_to”在语法上更正确。但是我理解马茨的逻辑 (3认同)
  • 为什么不同时`respond_to?`和`responds_to?`?Ruby有一堆像这样别名的方法. (2认同)
  • 我在想出一个英语结构时遇到了麻烦,其中 `responds_to?` 实际上是有道理的并且是正确的。语法正确:“它是`respond_to吗?`:bar”; “foo`respond_to` 是 :bar 吗?”。只有将指示性的“Foo `responds_to` :bar”转换成一个替代疑问词——“Foo `responds_to` :bar?” 这是否有任何意义,这绝对是对语言的自由。长话短说——`respond_to?` 是正确的,即使像英语一样是首要考虑因素。 (2认同)

saw*_*awa 8

你怎么知道接收器总是第三人称单数?可能的是,所述接收机是I,we,you,或they,或表示多个一些其他的事情.在那种情况下,你还会说这responds_to?比自然更自然respond_to?吗?为了保持通用性,最好将表单中的方法命名为尽可能通用.而不是命名的第三人称单数的方法,它更有意义,它的名字在默认情况下,稀少不定式形式,这也是在字典中.

  • 我想我总是认为接收器是“它”。 (3认同)