全部,
我正在尝试改编一些Ruby代码以在C#中工作,但C#不提供与Ruby相同的可用赋值语法
这是我正在尝试适应的一些Ruby代码:
x, x1 = x1, x-q*x1
y, y1 = y1, y-q*y1
a, b = b, a-q*b
因此,我接受并执行了此操作,但是得到的结果与上述不同:
x = x1
x1 = x-q*x1
y = y1
y1 = y-q*y1
a = b
b = a-q*b
Ruby如何评估作业?为什么当我将多个作业分成单项作业时结果却不同?
Ruby首先对RHS上的每个表达式求值,然后将它们分配给代表性的LHS变量。
(基本上)这是Ruby评估第三行的方式a, b = b, a-q*b
:
temp1 = b
temp2 = a-q*b
a = temp1
b = temp2
用一个例子a = 5
,b = 7
和q = 10
:
a, b = (7), (5 - 10*7)
产量
a == 7
b == -65
如您所见,在评估使用它的RHS表达式之前,没有值a
或b
从其初始值起没有改变。
与C#代码中发生的事情对比:
a = b // a is changed BEFORE evaluating the value
// that will be put into b
b = a-q*b // The value of a has already been changed:
// this is now the same as b = b-q*b, which is not intended
示例结果使用与上述相同的值:
a == 7
b == 7 - 10*7 == -63 // Not what we want...
为了获得正确的结果,请在此答案的顶部使用多行赋值和temp变量:
temp1 = b // 7
temp2 = a-q*b // 5 - 10*7 == -65
a = temp1 // 7
b = temp2 // -65
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句