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

时间:2015-08-12 00:30:38

标签: ruby

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

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

示例:

defined?(super)
=> "super"

defined?(nil)
=> "nil"

defined?(Object)
=> "constant"

2 个答案:

答案 0 :(得分:7)

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

  

'?'方法...返回

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

defined?属于(b)。

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

  

[defined?是]一个控制结构。并非一切都是用Ruby发送的消息,例如控制结构,变量,块不是对象。 defined?就是其中之一。

答案 1 :(得分:2)

萨瓦指出defined? is not actually a method

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

  

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

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