为什么 `defined?` 关键字不是 return 布尔值?
Why does `defined?` keyword not return boolean?
在ruby中,大多数以?
return 布尔值结尾的方法或关键字。我们除了让他们表现得像这样。为什么 defined?
关键字 return 是别的东西?或者为什么最后会有?
?
"defined?"-方法可以 return 多于 "true" 或 "false"。它告诉你它是什么类型的变量,如果它被定义的话。
检查
Checking if a variable is defined?
和
http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-defined-3F
开发人员选择 return 比 true
或 false
更有意义的东西,因为唯一没有布尔值 returned 的情况是显式比较:
defined?(:x) == true
# => always `false`
这种比较通常不应该做,因为像 ||
和 &&
这样的逻辑运算符很可能 return 一些真实的对象而不是 true
.几乎不需要任何东西。
这个问题可以从两个方面来理解:
- 为什么不直接 return
true
或 false
?
这是因为它编码的信息比简单定义或未定义的信息更多:
defined? Class # => "constant"
defined? 42 # => "expression"
defined? nil # => "nil"
defined? x # => nil
- 为什么它的末尾有
?
,因为按照约定,问号是为谓词保留的?
你是对的,这是不一致的。最可能的原因是:
几乎总是,无论如何你都会用它作为谓词
if defined? x
# do something
end
最短的替代方案是 definition_type_of
,这听起来不像我能想到的谓词。通常,您希望保留语言中的保留字简短
在ruby中,大多数以?
return 布尔值结尾的方法或关键字。我们除了让他们表现得像这样。为什么 defined?
关键字 return 是别的东西?或者为什么最后会有?
?
"defined?"-方法可以 return 多于 "true" 或 "false"。它告诉你它是什么类型的变量,如果它被定义的话。
检查 Checking if a variable is defined? 和 http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-defined-3F
开发人员选择 return 比 true
或 false
更有意义的东西,因为唯一没有布尔值 returned 的情况是显式比较:
defined?(:x) == true
# => always `false`
这种比较通常不应该做,因为像 ||
和 &&
这样的逻辑运算符很可能 return 一些真实的对象而不是 true
.几乎不需要任何东西。
这个问题可以从两个方面来理解:
- 为什么不直接 return
true
或false
?
这是因为它编码的信息比简单定义或未定义的信息更多:
defined? Class # => "constant"
defined? 42 # => "expression"
defined? nil # => "nil"
defined? x # => nil
- 为什么它的末尾有
?
,因为按照约定,问号是为谓词保留的?
你是对的,这是不一致的。最可能的原因是:
几乎总是,无论如何你都会用它作为谓词
if defined? x # do something end
最短的替代方案是
definition_type_of
,这听起来不像我能想到的谓词。通常,您希望保留语言中的保留字简短