2015-10-06 89 views
0

我是Ruby的新手。我剛纔注意到,如果我寫ruby​​中a = 1,b = 2和a = 1(換行符)b = 2之間的差異

a = 1, b = 2 
puts a, b 

則輸出

1 
2 
2 

但如果我寫

a = 1 
b = 2 

然後輸出原來是

1 
2 

爲什麼? 我有以下代碼:

s = 0, i = 1 

while i <= 100 
    s += i 
    i++ 
end 

puts s,i 

當我運行它,它有以下錯誤:

test.rb:14: syntax error, unexpected keyword_end 
test.rb:16: syntax error, unexpected end-of-input, expecting  keyword_end 
puts s, i 
     ^

我也不知道我錯了。謝謝。

+0

如果您有兩個問題,請提出兩個問題。事實證明,您提出的兩個問題都已經在StackOverflow上進行了許多次,許多次,許多次,多次的回答,但不可能指出重複,因爲您將兩個問題歸結爲一個問題。 –

+0

對不起,我在查詢之前仔細搜索過,我沒有找到我需要的答案。下次我會分解我的問題。 – Caesar

回答

6

如果你想在同一行同時將與ab,選擇這些語法之一:

a, b = 1, 2 

a = 1; b = 2 

無論是那些應該工作。

但是,如果你寫a = 1, b = 2,紅寶石將其解釋爲:

a = [1, b = 2] 

你可能已經看到,a是通過運行短puts a.inspectp a爲自己的數組。

您的最後一個代碼塊不起作用,因爲i++在Ruby中不是有效的語法。嘗試i += 1

+0

謝謝!我真的沒有弄清楚ruby中i ++的不可訪問性! – Caesar

+2

很好的解釋,但是你可以通過解釋爲什麼* Ruby解釋'a = 1,b = 2'(或者只是'a = 1,2')。如你所知,原因與平行分配有關。這裏有一個很好的解釋,這裏的左值比右值稍低[https://www.safaribooksonline.com/library/view/the-ruby-programming/9780596516178/ch04s05.html]。我剛剛學到的一件事就是你可以編寫'a,= 1,2',在這種情況下'a#=> 1'。 (我總是寫'a,_ = 1,2'。) –

3

回答你的第一個問題:

看看這樣說:

a = 1, b = 2 

a = 1, b = 2 
puts a.inspect, b.inspect 
# [1, 2] 
# 2 

a當你做這種方式成爲價值12數組

因爲,它被這樣解釋:

First, 2 is assigned to b i.e. b = 2 
Then, (1, b = 2) is assinged to a i.e. a = [1, 2] 

P.S. inspect是觀察對象內部內容的好方法,因爲它返回一個包含對象的可讀表示的字符串。

回答你的第二個問題:

有2個問題中的代碼塊:

首先,s = 0, i = 1是又錯了! (如在第一部分解釋)你要做的,要麼:

s = 0 ; i = 1 

或:賦值給si

s = 0 
i = 1 

方式。

其次,Ruby中沒有++運算符,所以你必須這樣做:i += 1而不是i++

這裏是正確的版本,你最後的代碼塊,其工作原理:

s = 0 
i = 1 

while i <= 100 
    s += i 
    i += 1 
end 

puts s, i 
+0

對不起,我剛剛採用了另一個答案:(無論如何thx! – Caesar

1
2.1.6 :001 > a=1, b=2 
=> [1, 2] 
2.1.6 :002 > puts a,b 
1 
2 
2 
=> nil 
2.1.6 :003 > a 
=> [1, 2] 
2.1.6 :004 > b 
=> 2 
2.1.6 :005 > 

你可以清楚地看到,a= [1,2]b=2所以輸出

puts a,b 
1 
2 
2 
0

你有兩個寫as

a,b=1,2 

    puts a,b 

如果你有寫爲

a=1,b=2 

Then value of a=[1,2] and value of b=2 

when you puts a,b then output will be as 

1 

2 

2 

而while循環將作爲

s=0 

i=1 

While (i <100) 

    s=s+1 

    i = i + 1 

end 

    puts s,i 
0

當使用昏迷分開你實際上聲明數組值。

A = 1,B = 2

A = [1,b]的

和因爲B = 2

a = [1,2]

所以要打印的陣列的第一和變量b

使用一個= 1;如果你想使用單行,b = 2。

可以啓動IRB那些東西玩...

我++是不是的Ruby語法。使用i + = 1

+0

是啊紅寶石這裏是不一樣的c + + – Caesar

相關問題