我是Ruby的新手,遇到了defined?
运算符。我认为?
暗示该方法返回true
/ false
但defined?
会返回标识符的描述(如果已定义)。
我知道有一个true
/ false
组件标识符已定义或未定义但我认为?
意味着返回值始终必须为{ {1}} / FALSE`。帮助
答案 0 :(得分:4)
它返回“truthy”值,该值为“truthy-true”或“truthy-false”。
在Ruby中,只有只有两件事是真实的:
false
(单身对象)nil
(单身对象)任何 else被认为是真实的。大量的Ruby代码将这一事实用于谓词。因此,检查谓词应该是:
if list.empty?
不
if list.empty? == true
答案 1 :(得分:2)
defined? a #=> nil
a = 7 # => 7
defined? a #=> "local-variable"
虽然它没有传回实际的'true'或'false'值,但它仍以相同的方式运行。
if defined? a
puts "This will still act as true"
end
#=> This will still act as true
之所以这样做是因为除了false
和nil
之外,所有情况都是正确的。
此link有关defined?
运算符的更多信息。
答案 2 :(得分:0)
这只是一种约定而不是语言的一部分,因此没有围绕问号的实际规则。来自http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/
“按照惯例,回答问题的方法(即Array#empty?如果接收方为空则返回true)以问号结尾。”
答案 3 :(得分:0)
“non-nil”/ nil与Ruby中的true / false相同。如果您来自其他语言,您可能有使用true / false进行测试的习惯,但在Ruby中我们测试对象是否为零。
所以这两个是相同的:
a = 'hello'
if defined?(a) then puts a end
a = 'hello'
if defined?(a) != nil then puts a end
如果你坚持要返回true / false,你可以使用第二个。这将返回true / false:
a != nil
答案 4 :(得分:0)
defined?
运算符如果未定义其参数(可以是任意表达式),则返回nil
,否则返回该参数的描述。
由于nil
的计算结果为false,并且(除了false)所有其他表达式的计算结果为true,因此defined?
的行为符合预期。