红宝石中a = 1,b = 2和a = 1(换行符)b = 2之间的差异

时间:2015-10-06 05:49:55

标签: ruby

我是Ruby的新手。我刚注意到,如果我写了

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
         ^

我也不知道自己哪里错了。感谢。

5 个答案:

答案 0 :(得分:6)

如果您想在一行上分配ab,请选择以下语法之一:

a, b = 1, 2

a = 1; b = 2

其中任何一个都应该有用。

但是如果你写a = 1, b = 2,Ruby会把它解释为:

a = [1, b = 2]

您可以通过简单地运行aputs a.inspect来看到p a是一个数组。

您的上一个代码块不起作用,因为i++在Ruby中不是有效的语法。试试i += 1

答案 1 :(得分:3)

回答第一个问题:

这样看:

a = 1, b = 2
puts a.inspect, b.inspect
# [1, 2]
# 2
当你这样做时,

a会成为值12的数组:

a = 1, b = 2 

因为,它是这样解释的:

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

或:

s = 0
i = 1

将值分配给si

其次,Ruby中没有++运算符,因此您必须执行:i += 1而不是i++

以下是您最后一个代码块的正确版本:

s = 0
i = 1

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

puts s, i

答案 2 :(得分: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

答案 3 :(得分:0)

你有两个写作

    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 

答案 4 :(得分:0)

When using a coma to separate values you are actually declaring an Array.

a = 1, b = 2

is

a = [1, b]

and because b = 2

a = [1, 2]

So you are printing the array first and the variable b

Use a = 1; b = 2 instead if you want to use a single line.

you can launch IRB to play with those things...

i++ is not a Ruby syntax. Use i += 1