在ruby中,为什么defined?
会返回一个字符串?大多数以?
结尾的其他ruby方法返回一个布尔值。
这是支持功能请求的黑客,还是故意滥用ruby约定,为什么?
示例:
defined?(super)
=> "super"
defined?(nil)
=> "nil"
defined?(Object)
=> "constant"
答案 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