为什么Ruby使用respond_to? 而不是responds_to?
我很好奇为什么Ruby的内省相关的方法来检查一个对象是否响应方法是respond_to?
而不是responds_to?
它总是看起来很尴尬,但也许这是因为我习惯了objective-c中的respondsToSelector
。
Matz 喜欢第二人称单数或第三人称复数:
“responds_to?” 对于说英语的人来说可能比“回应?”更有意义。
也许。 但我是日本人。 Ruby不是英语。 标准库中避免第三人称单数forms是基本的命名规则。
you = Human.new if you.respond_to?(:knock) ... end
你怎么知道接收器总是第三人称单数? 接收者有可能是I
, we
, you
或者they
,或者其他代表多个的东西。 在这种情况下,你会不会说responds_to?
比respond_to?
更自然respond_to?
? 为了保持一般性,最好尽可能以一般forms来命名方法。 而不是以第三人称单数命名一个方法,更有意义的是将其命名为默认的,无用的不定式forms,这也在字典中使用。