Vik*_*man 2 ruby variables comma sequence
您好StackOverflow的工作人员!
我们正在做一些Ruby,似乎有一个例子似乎很难弄清楚:
a=5
b=4
a,b=a+b,a
=> [9,5]
=> a=9
=> b=5
Run Code Online (Sandbox Code Playgroud)
怎么来的?那里发生了什么事?为什么它起作用而“ a,b,a”不起作用?为什么“ b”变成5而“ a”变成9?
如果我们只写
a,b=a+b
=> 9
=> a=9
=> b=nil
Run Code Online (Sandbox Code Playgroud)
我们猜测这是某种Ruby错误,将在2.5版中修复。也许有一些潜在的法律已经实施,但我们还没有看到。
你们会帮助我们吗?
该示例代码是Stanford Ruby课程的一个测验问题的一部分。他们告诉我们在遇到问题时要去问StackOverflow天才。
对我来说,似乎您在理解并行分配运算符的用法,而不是Ruby错误。
前者和后者的示例非常不同。让我们在一起:
a,b=a+b,a
a,b=a+b
Run Code Online (Sandbox Code Playgroud)
现在添加一些空格
a,b = a+b, a
a,b = a+b
Run Code Online (Sandbox Code Playgroud)
第一个表达式是与的LHS a, b和RHS的a+b , a并行分配,后者是和的LHS a, b和RHS的并行分配a+b。注意RHS的区别。
这两个等于:
(1)
a = a+b
b = a' **
Run Code Online (Sandbox Code Playgroud)
(2)
a = a+b
b = nil
Run Code Online (Sandbox Code Playgroud)
但是,请记住,这都是一次操作。因此,在(1)的情况下,它是A'而不是A:使用了'a'的旧值,而不是刚分配的'a + b'中的值-因为原始的并行分配是ONE OPERATION,而不是两次运算就像我在这里出于分解目的将其分解一样。
这意味着:
a,b = a+b, a
Run Code Online (Sandbox Code Playgroud)
导致s1=a+b要计算,s2=a要计算,然后a=s1; b=s2;仅在“一次操作”中。
由于它是一个操作,并且分配给两个值,因此将返回一个包含两个元素的数组-与执行单数分配和返回单个值相反。
如果您要执行三重分配:
a,b,c,d,e,f = 0,1,2,3,4,5
Run Code Online (Sandbox Code Playgroud)
数组[0,1,2,3,4,5]将成为结果,并且a / b / c / d / e / f将分别分配0/1/2/3/4/5值。
有关更多信息,请参见Ruby的文档以了解并行分配,还可能*用于数组扩展和参数分组的运算符
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |