为什么`定义?`返回一个字符串或零?

在ruby中,为什么要defined? 返回一个字符串? 大多数其他ruby方法以?结尾? 返回一个布尔值。

这是一个支持function请求的黑客,还是故意滥用ruby约定,为什么?

例子:

 defined?(super) => "super" defined?(nil) => "nil" defined?(Object) => "constant" 

不,它既不是黑客也不是滥用Ruby惯例。 正如matz在ruby-talk 7986中所写:

‘?’ 方法…返回

  • (a)真或假
  • (b)非虚假资料价值或零

defined? 落入(b)。

另外,正如评论者指出的那样, defined? 不是一种方法。 Matz扩展了ruby-talk 1637 :

[ defined? 是一种控制结构。 并非一切都是用Ruby发送的消息,例如控制结构,变量,块不是对象。 defined? 是这些事情之一。

正如sawa所指出的那样defined? 实际上并不是一种方法 。

如果是这样,Ruby源代码文档声明允许以问号结尾的方法。

以约定结束问号的方法返回布尔值。 但他们可能并不总是回归真假 。 他们通常会返回一个对象来表示真值(或“真实”值)。

参考: https : //github.com/ruby/ruby/blob/c8b3f1b470e343e7408ab5883f046b1056d94ccc/doc/syntax/methods.rdoc