Ruby 一个赋值的问题,还希望大家指教

yeyong14 · 2014年06月26日 · 最后由 nouse 回复于 2014年06月27日 · 1955 次阅读
a = 1
b= 1
for i in 1..5
  a, b = b, a+b
end
#这个 a = 8,b = 13

for i in 1..5
  a = b
  b = a+b
end
#这样a = 16, b = 32

这个赋值有什么先后顺序的吗?

a, b = b, a+b 为并行赋值,会先把右边的值计算出来,然后付给左边
换言之,在对 b 赋值时,a 的值依然没变

而第二种写法,对 b 赋值时候,a 的值已经改变了

可以在 2 个循环里分别puts a puts b , 就可以看得比较直观了

a b i 1 1 0 1 2 1 2 3 2 3 5 3 5 8 4 8 13 5

1 2 1 2 4 2 4 8 3 8 16 4 16 32 5

@algo31031 @binbean1001 谢谢两位的指教,明白了,这个是一个公司的面试题,先让我写个斐波那契数列,然后他写了下面那个,问我两个不同点。用不是并行赋值在写一次斐波那契数列。看了两个赋值,还没有想过会这样,紧张就不知道怎么写了

#3 楼 @yeyong14 用 for 写 Fibonacci,这个面试官水平不行啊。1.9 开始的推荐做法是 enumerator。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号