Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ruby整数赋值-使Ruby赋值适应C类型语言_C#_Ruby_Int - Fatal编程技术网

C# Ruby整数赋值-使Ruby赋值适应C类型语言

C# Ruby整数赋值-使Ruby赋值适应C类型语言,c#,ruby,int,C#,Ruby,Int,全部, 我正在尝试修改一些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代码以在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是如何评估作业的?为什么当我把多个赋值转换成单数赋值时,结果是不同的?

x,x1=x1,x-q*x1
意味着x和x1基本上会同时被赋值,但是你的C变量没有考虑到这一点。在c#中,代码x将在x1之前分配,因此x1将被分配
x1-q*x1
,而不是
x-q*x1
,因为此时x已经被分配给x1

一种可能的通用C#解决方案是

tempX = x1
tempX1 = x-q*x1
x = tempX
x1 = tempX1

x,x1=x1,x-q*x1
意味着x和x1基本上会同时被赋值,但是您的C#变体没有考虑到这一点。在c#中,代码x将在x1之前分配,因此x1将被分配
x1-q*x1
,而不是
x-q*x1
,因为此时x已经被分配给x1

一种可能的通用C#解决方案是

tempX = x1
tempX1 = x-q*x1
x = tempX
x1 = tempX1

Ruby在重新分配变量之前先计算赋值的右侧。为了使这一点更加明确,它采取了如下措施:

new_x, new_x1 = old_x1, old_x-q*old_x1
这导致:

new_x = old_x1
new_x1 = old_x-q*old_x1
但你所做的是:

new_x = old_x1
new_x1 = new_x-q*old_x1 (= old_x1 - q * old_x1 = (1 - q) * old_x1)

因此,结果是不同的。

Ruby在重新分配变量之前先计算赋值的右侧。为了使这一点更加明确,它采取了如下措施:

new_x, new_x1 = old_x1, old_x-q*old_x1
这导致:

new_x = old_x1
new_x1 = old_x-q*old_x1
但你所做的是:

new_x = old_x1
new_x1 = new_x-q*old_x1 (= old_x1 - q * old_x1 = (1 - q) * old_x1)

因此结果是不同的。

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 == 7
b == 7 - 10*7 == -63  // Not what we want...
要获得正确的结果,请在此答案顶部使用带临时变量的多行赋值:

temp1 = b       // 7
temp2 = a-q*b   // 5 - 10*7 == -65
a = temp1       // 7
b = temp2       // -65

Ruby首先计算RHS上的每个表达式,然后将它们分配给repsective 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 == 7
b == 7 - 10*7 == -63  // Not what we want...
要获得正确的结果,请在此答案顶部使用带临时变量的多行赋值:

temp1 = b       // 7
temp2 = a-q*b   // 5 - 10*7 == -65
a = temp1       // 7
b = temp2       // -65

问题是,在作业中

x, x1 = x1, x-q*x1
Ruby在执行任何一个赋值之前都会计算右侧的两个表达式。但是如果你写

x = x1
x1 = x-q*x1
然后,因为第一条语句修改了
x
的值,所以表达式
x-q*x1
的值也发生了变化

您需要使用一个临时变量,如下所示

newx = x1
x1 = x-q*x1
x = newx

避免过早计算表达式的影响。

问题在于,在赋值中

x, x1 = x1, x-q*x1
Ruby在执行任何一个赋值之前都会计算右侧的两个表达式。但是如果你写

x = x1
x1 = x-q*x1
然后,因为第一条语句修改了
x
的值,所以表达式
x-q*x1
的值也发生了变化

您需要使用一个临时变量,如下所示

newx = x1
x1 = x-q*x1
x = newx

避免过早计算表达式的影响。

您需要使用一些临时变量。请详细说明。为什么需要临时变量?谢谢你能提供一个有效的例子吗?看到不同的结果?C#中的变量是什么类型的?您需要使用一些临时变量。请详细说明。为什么需要临时变量?谢谢你能提供一个有效的例子吗?看到不同的结果?C#中的变量是什么类型的?