2015-10-06 91 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

相关问题