我是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
^
我也不知道自己哪里错了。感谢。
答案 0 :(得分:6)
如果您想在一行上分配a
和b
,请选择以下语法之一:
a, b = 1, 2
或
a = 1; b = 2
其中任何一个都应该有用。
但是如果你写a = 1, b = 2
,Ruby会把它解释为:
a = [1, b = 2]
您可以通过简单地运行a
或puts a.inspect
来看到p a
是一个数组。
您的上一个代码块不起作用,因为i++
在Ruby中不是有效的语法。试试i += 1
。
答案 1 :(得分:3)
回答第一个问题:
这样看:
a = 1, b = 2
puts a.inspect, b.inspect
# [1, 2]
# 2
当你这样做时, a
会成为值1
和2
的数组:
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
将值分配给s
和i
。
其次,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