标签: compound-assignment

运算符优先级与Javascript三元运算符

我似乎无法将这个代码的第一部分(+ =)与三元运算符结合起来.

h.className += h.className ? ' error' : 'error'
Run Code Online (Sandbox Code Playgroud)

我认为这段代码的工作方式如下:

h.className = h.className + h.className ? ' error' : 'error'
Run Code Online (Sandbox Code Playgroud)

但这不正确,因为这会在我的控制台中出错.

所以我的问题是我应该如何正确地插入这段代码?

javascript variable-assignment conditional-operator operator-precedence compound-assignment

116
推荐指数
3
解决办法
10万
查看次数

在python中+ =做到了什么?

我需要知道python中的+ =做了什么.就这么简单.我也很感激链接到python中其他简写工具的定义.

python operators notation shorthand compound-assignment

103
推荐指数
9
解决办法
50万
查看次数

在"k + = c + = k + = c;"中是否有对内联运算符的解释?

以下操作的结果是什么解释?

k += c += k += c;
Run Code Online (Sandbox Code Playgroud)

我试图理解以下代码的输出结果:

int k = 10;
int c = 30;
k += c += k += c;
//k=80 instead of 110
//c=70
Run Code Online (Sandbox Code Playgroud)

目前我正在努力理解为什么"k"的结果是80.为什么分配k = 40不起作用(实际上Visual Studio告诉我该值没有在其他地方使用)?

为什么k 80而不是110?

如果我将操作拆分为:

k+=c;
c+=k;
k+=c;
Run Code Online (Sandbox Code Playgroud)

结果是k = 110.

我试图通过CIL查看,但是我在解释生成的CIL方面并没有那么深刻,也无法得到一些细节:

 // [11 13 - 11 24]
IL_0001: ldc.i4.s     10
IL_0003: stloc.0      // k

// [12 13 - 12 24]
IL_0004: ldc.i4.s     30
IL_0006: stloc.1      // c

// [13 13 - 13 30]
IL_0007: ldloc.0      // …
Run Code Online (Sandbox Code Playgroud)

c# cil compound-assignment

88
推荐指数
3
解决办法
6116
查看次数

Java中的快捷方式"or-assignment"(| =)运算符

我在Java中有很长的比较,我想知道它们中的一个或多个是否真实.比较字符串很长且难以阅读,因此我将其分解以便于阅读,并自动使用快捷操作符|=而不是negativeValue = negativeValue || boolean.

boolean negativeValue = false;
negativeValue |= (defaultStock < 0);
negativeValue |= (defaultWholesale < 0);
negativeValue |= (defaultRetail < 0);
negativeValue |= (defaultDelivery < 0);
Run Code Online (Sandbox Code Playgroud)

negativeValue如果任何默认的<something>值为负,我希望是真的.这有效吗?它会做我期望的吗?我在Sun的网站或stackoverflow上看不到它,但Eclipse似乎没有问题,代码编译和运行.


同样,如果我想执行几个逻辑交叉点,我可以使用&=而不是&&吗?

java assignment-operator or-operator compound-assignment

84
推荐指数
2
解决办法
6万
查看次数

为什么Java没有条件和条件或运算符的复合赋值版本?(&& =,|| =)

因此,对于在布尔二元运算符,Java有&,|,^,&&||.

让我们简要总结一下他们在这里简要介绍的内容:

对于&,结果值是true两个操作数值是否为true; 否则,结果是false.

对于|,结果值是false两个操作数值是否为false; 否则,结果是true.

对于^,结果值是true操作数值是否不同; 否则,结果是false.

&&操作是一样&,但是评估其右边的操作数只有在其左侧操作数的值true.

||操作是一样|的,但评估其右边的操作数只有在其左侧操作数的值false.

现在,所有5间,那些3有复合赋值版本,分别为|=,&=^=.所以我的问题是显而易见的:为什么不是Java提供&&=||=呢?我发现我需要那些比我更需要更多的&=|=.

而且我不认为"因为它太长"是一个很好的答案,因为Java有>>>=.这个遗漏必须有更好的理由.


15.26分配运营商 …

java conditional-operator short-circuiting assignment-operator compound-assignment

77
推荐指数
4
解决办法
1万
查看次数

加法赋值+ =表达式中的行为

最近我遇到了这个问题:分配运营商链理解.

在回答这个问题,我开始怀疑我自己的加法赋值运算符的行为的理解+=或任何其他operator=(&=,*=,/=等).

我的问题是,a下面的表达式中的变量何时更新到位,以便在评估期间其更改的值反映在表达式的其他位置,它背后的逻辑是什么?请看下面两个表达式:

表达1

a = 1
b = (a += (a += a))
//b = 3 is the result, but if a were updated in place then it should've been 4
Run Code Online (Sandbox Code Playgroud)

表达2

a = 1
b = (a += a) + (a += a)
//b = 6 is the result, but if a is not updated in place then it should've been 4
Run Code Online (Sandbox Code Playgroud)

在第一个表达式中,当(a …

javascript java language-lawyer compound-assignment

58
推荐指数
2
解决办法
2782
查看次数

为什么C#中没有|| =或&& =运算符?

我们为所有逻辑运算符,Shift运算符,Additive运算符和所有Multiplicative运算符都有等效的赋值运算符.

为什么逻辑运算符被遗漏了?难道有一个很好的技术理由吗?

c# language-design operators assignment-operator compound-assignment

56
推荐指数
1
解决办法
9594
查看次数

Lua运算符,为什么不定义+ =, - =等等?

这个问题我有一段时间以来一直有点恼火,而且从来没有到处寻找答案.

但是我想我至少可以问这个问题,也许有人可以解释一下.

基本上我使用的许多语言都使用语法糖来编写(使用C++中的语法):

int main() {
    int a = 2;
    a += 3; // a=a+3
}
Run Code Online (Sandbox Code Playgroud)

虽然在lua +=中没有定义,所以我必须写a=a+3,这也是关于语法糖.当使用更"有意义"的变量名称时,例如:bleed_damage_over_time或者它开始变得乏味的东西:

bleed_damage_over_time = bleed_damage_over_time + added_bleed_damage_over_time 
Run Code Online (Sandbox Code Playgroud)

代替:

bleed_damage_over_time += added_bleed_damage_over_time
Run Code Online (Sandbox Code Playgroud)

所以如果你没有一个好的解决方案,我想知道如何解决这个问题,在这种情况下,我当然会有兴趣听到它; 但是为什么lua没有实现这种语法糖.

lua language-design assignment-operator compound-assignment

40
推荐指数
3
解决办法
2万
查看次数

bool短路的&=和| =运算符?

在C++中编写这样的代码时:

bool allTrue = true;
allTrue = allTrue && check_foo();
allTrue = allTrue && check_bar();
Run Code Online (Sandbox Code Playgroud)

check_bar()如果check_foo()退回,将不会被评估false.这称为短路或短路评估,是惰性评估原则的一部分.

这是否适用于复合赋值运算符&=

bool allTrue = true;
allTrue &= check_foo();
allTrue &= check_bar(); //what now?
Run Code Online (Sandbox Code Playgroud)

用逻辑OR替换所有&with |truewith false.

c++ boolean lazy-evaluation short-circuiting compound-assignment

38
推荐指数
5
解决办法
3万
查看次数

不同的行为可能会导致精度下降

在Java中,当你这样做

int b = 0;
b = b + 1.0;
Run Code Online (Sandbox Code Playgroud)

您可能会丢失精度错误.但是,如果你这样做,为什么呢?

int b = 0;
b += 1.0;
Run Code Online (Sandbox Code Playgroud)

没有任何错误?

java implicit-cast compound-assignment

30
推荐指数
1
解决办法
2620
查看次数