【发布时间】:2015-11-23 01:15:52
【问题描述】:
在 ruby 中,大多数以 ? 结尾的方法或关键字都返回布尔值。我们除了他们这样行事。为什么defined? 关键字会返回其他内容?或者为什么末尾有??
【问题讨论】:
标签: ruby conventions defined
在 ruby 中,大多数以 ? 结尾的方法或关键字都返回布尔值。我们除了他们这样行事。为什么defined? 关键字会返回其他内容?或者为什么末尾有??
【问题讨论】:
标签: ruby conventions defined
“定义?”方法可以返回多个“真”或“假”。它告诉你它是什么类型的变量,如果它被定义的话。
检查 Checking if a variable is defined? 和 http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-defined-3F
【讨论】:
开发人员选择返回比true 或false 更有意义的东西,因为唯一不返回布尔值的情况是显式比较:
defined?(:x) == true
# => always `false`
这种比较通常是你不应该做的,因为像||和&&这样的逻辑运算符很可能返回一些真实的对象而不是true。这几乎不需要任何东西。
【讨论】:
这个问题可以从两个方面来理解:
true 或false?这是因为它编码的信息比简单地是否定义了更多信息:
defined? Class # => "constant"
defined? 42 # => "expression"
defined? nil # => "nil"
defined? x # => nil
?,因为按照惯例,问号是为谓词保留的?你是对的,这是不一致的。最可能的原因是:
几乎总是,无论如何你都会使用它作为谓词
if defined? x
# do something
end
最短的替代方案是definition_type_of,这听起来不像是我能想到的谓词。通常,您希望保留您的语言中的保留字简短
【讨论】:
defined? 周围真正的 wtf 部分一直是为什么它返回字符串而不是符号?。我绝对没有好的答案......