2012-04-20 99 views
0

我是Ruby新手,遇到了defined?運算符。我認爲?意味着該方法返回true/false,但defined?返回標識符的描述,如果它被定義。Ruby編程:謂詞方法

我知道存在這樣一個true/false成分標識或者是沒有定義,但我認爲?意味着返回值一直是true /返回FALSE。幫幫我?

回答

4

它返回「truthy-true」或「truthy-false」的「真值」。

在Ruby中,有只有兩件事是truthy假:

  • false(單件物體)
  • nil(單件物體)

任何否則被認爲是真實的。大量的Ruby代碼將這個事實用於謂詞。謂詞檢查,因此,應該是:

if list.empty? 

不是:

if list.empty? == true 
+0

啊有道理。謝謝。 – 2012-04-20 18:19:42

0

「非空」/無是一樣的真/假在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 
2
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中一切都是與falsenil異常真實。

link有關於defined?運營商的更多信息。

0

如果defined?運算符的參數(可以是任意表達式)未定義,則defined?運算符返回nil,否則返回該參數的描述。

而且由於nil的計算結果爲false且(除了false)所有其他表達式的計算結果爲true,因此defined?的行爲與此相同。