为什么`定义?`返回一个字符串或零?
在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