在ruby中,以?
结尾的大多数方法或关键字都返回布尔值。而我们除了他们表现得像这样。为什么defined?
关键字会返回其他内容?或者为什么最后会有?
?
答案 0 :(得分:2)
开发人员选择返回比true
或false
更有意义的内容,因为唯一没有返回布尔值的情况是显式比较:
defined?(:x) == true
# => always `false`
这种比较是您通常不应该做的事情,因为像||
和&&
这样的逻辑运算符可能会返回一些真正的对象而不是true
。这几乎不需要。
答案 1 :(得分:2)
这个问题可以通过两种方式来理解:
---
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 >
?这是因为它编码的信息比简单定义的信息更多:
true
false
,因为约定是,为谓词保留问号?你是对的,这是不一致的。最可能的原因是:
几乎总是,你会将它用作谓词
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