2013-04-26 101 views
10

我什麼時候知道何時聲明一個變量而不是在Ruby中?在Ruby中聲明變量?

我想知道爲什麼第一個代碼需要輸入聲明爲一個字符串和塊外,而第二個塊沒有。

input = '' 
while input != 'bye' 
    puts input 
    input = gets.chomp 
end 
puts 'Come again soon!' 

與:

while true 
    input = gets.chomp 
    puts input 
    if input == 'bye' 
    break 
    end 
end 
puts 'Come again soon!' 

回答

18

沒有變量紅寶石曾經宣佈過。相反,規則是變量在使用前必須出現在賦值中。

看看你的第一個例子中的前兩行:

input = '' 
while input != 'bye' 

while條件使用變量input。因此,分配是必要的。在第二個例子:

while true 
    input = gets.chomp 
    puts input 

同樣,它在puts呼叫使用之前可變input分配。在這兩個例子中,世界都是對的。

+3

這不是*正確*正確,取決於您對「分配」的定義。對比'if(false)then a = 3 end;一個|| 3'與'b || 3'。如果你在解釋器讀取的任何執行路徑上定義「assigned」,那麼是,否則它的變量在解釋器分配之前永遠不能使用。 – 2013-04-27 00:02:13

+0

Preciate it Gene,現在有意義! – 2013-04-27 00:28:21

+2

@KristopherMicinski夠公平的。應該說「出現在任務中」,所以做了編輯。 – Gene 2013-04-27 02:26:49