我是Ruby新手,遇到了defined?
運算符。我認爲?
意味着該方法返回true
/false
,但defined?
返回標識符的描述,如果它被定義。Ruby編程:謂詞方法
我知道存在這樣一個true
/false
成分標識或者是沒有定義,但我認爲?
意味着返回值一直是true
/返回FALSE。幫幫我?
我是Ruby新手,遇到了defined?
運算符。我認爲?
意味着該方法返回true
/false
,但defined?
返回標識符的描述,如果它被定義。Ruby編程:謂詞方法
我知道存在這樣一個true
/false
成分標識或者是沒有定義,但我認爲?
意味着返回值一直是true
/返回FALSE。幫幫我?
它返回「truthy-true」或「truthy-false」的「真值」。
在Ruby中,有只有兩件事是truthy假:
false
(單件物體)nil
(單件物體)任何否則被認爲是真實的。大量的Ruby代碼將這個事實用於謂詞。謂詞檢查,因此,應該是:
if list.empty?
不是:
if list.empty? == true
這只是一個慣例而不是語言的一部分,所以沒有圍繞問號的實際規則。 「從http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/
」按照慣例,回答問題的方法(即Array#empty?如果接收方爲空則返回true)以問號結束。
「非空」/無是一樣的真/假在Ruby中。如果你來自其他語言,你可能有這種使用true/false測試的習慣,但在Ruby中我們測試一個對象是否爲零。
所以這兩個是一樣的:
a = 'hello'
if defined?(a) then puts a end
a = 'hello'
if defined?(a) != nil then puts a end
如果你堅持要返回true/false,您可以用第二個。這將返回真/假:
a != nil
defined? a #=> nil
a = 7 # => 7
defined? a #=> "local-variable"
雖然它不會以同樣的方式傳回實際的「真」或「假」值仍然功能。
if defined? a
puts "This will still act as true"
end
#=> This will still act as true
這樣做的原因是因爲在Ruby中一切都是與false
和nil
異常真實。
此link有關於defined?
運營商的更多信息。
如果defined?
運算符的參數(可以是任意表達式)未定義,則defined?
運算符返回nil
,否則返回該參數的描述。
而且由於nil
的計算結果爲false且(除了false)所有其他表達式的計算結果爲true,因此defined?
的行爲與此相同。
啊有道理。謝謝。 – 2012-04-20 18:19:42