为什么`定义?`关键字不返回布尔值?

时间:2015-08-28 11:25:05

标签: ruby conventions defined

在ruby中,以?结尾的大多数方法或关键字都返回布尔值。而我们除了他们表现得像这样。为什么defined?关键字会返回其他内容?或者为什么最后会有?

3 个答案:

答案 0 :(得分:2)

开发人员选择返回比truefalse更有意义的内容,因为唯一没有返回布尔值的情况是显式比较:

defined?(:x) == true
# => always `false`

这种比较是您通常不应该做的事情,因为像||&&这样的逻辑运算符可能会返回一些真正的对象而不是true。这几乎不需要。

答案 1 :(得分:2)

这个问题可以通过两种方式来理解:

  1. 为什么它只是返回--- layout: category title: Android permalink: android/ --- --- layout: default --- <ul class="posts"> {% for post in site.posts %} {% if post.categories contains page.title %} <h2><a class="post-heading" href="{{ post.url }}">{{ post.title }}</a></h2> <p> {{ post.description }} </p> <p class="date">{{ post.date | date_to_string }}</p> <hr class="hr-color"></hr> {% endif %} {% endfor %} </ul >
  2. 这是因为它编码的信息比简单定义的信息更多:

    true
    1. 为什么最后有false,因为约定是,为谓词保留问号?
    2. 你是对的,这是不一致的。最可能的原因是:

      • 几乎总是,你会将它用作谓词

        defined? Class # => "constant"
        defined? 42    # => "expression"
        defined? nil   # => "nil"
        defined? x     # => nil
        
      • 最短的替代方案,听起来不像我能想到的谓词?。通常,您希望保留语言中的保留字

答案 2 :(得分:-1)

“已定义?” - 方法可以返回多于“true”或“false”。它告诉你,如果它被定义的话,它是什么类型的变量。

检查 Checking if a variable is defined?http://ruby-doc.org/docs/keywords/1.9/Object.html#method-i-defined-3F