我试图用if-let表达来概括我的大脑。我知道它的作用,但我找不到一些细节背后的基本原理。
第一个细节是赋值运算符而不是相等运算符的使用,第二个细节是操作数的位置。
例如:
let a = Some(5);
if let Some(i) = a {
println!("Hello, {}!", i);
}
在我看来,这样更“清晰”:
if let Some(i) == a {
println!("Hello, {}!", i);
}
或者更好:
if let a == Some(i) {
println!("Hello, {}!", i);
}
有人能帮我理解这背后的原理吗?
Rust语法是
let Some(i) = a
因为我们正在创建一个新变量i
,并用a
中的包装值初始化它。运算符=
用于创建新变量。左手边有一个图案,右手边有一个表达式。模式中左侧的所有变量都会根据右侧表达式中的相应值进行初始化。
比较运算符==
在这里没有意义。说
let Some(i) == a
似乎返回了这个表达式
let Some(i)
等于表达式
a
当使用==
时,您希望左侧和右侧是完整的表达式,它们已经有值,然后您返回它们是否相等。但这不是我们在if-let中所做的。当我们使用if-let时,我们正在创建一个新变量。==
只有当它两边的表达式都可以计算时才有意义。
类似地,表达式
let a == Some(i)
很奇怪,因为a
已经存在。我们当然不会创建一个新的变量a
。反对使用==
的相同论点适用于之前,因为i
尚不存在。
总之,我们在创建新变量时使用=
,在测试表达式的相等性时使用=
(如果表达式中有变量,则此类变量必须已经存在)。
这是C++程序员常见的错误,包括熟练的C++程序员也会把相等(==)与赋值(=)运算符相 混淆。这种错误的破坏性在于它们通常不会导致语法错误,而是能够顺利编译,程序运行完后,因为运行时的逻辑错误而得到错误结果。 C++有两个方面会导致这些问题。一个是任何产生数值的表达式都可以用于任何控制结构的判断部分。如果数值为0,则当作false,如果数值为非0,则当作true。第二是C++赋值会产生一个值,
本文向大家介绍JavaScript中的赋值运算符是什么?,包括了JavaScript中的赋值运算符是什么?的使用技巧和注意事项,需要的朋友参考一下 使用赋值运算符,您可以将值分配给变量。JavaScript支持以下赋值运算符- 序号 运算符和说明 1 =(简单分配) 从右侧操作数到左侧操作数分配值 例如: C = A + B将A + B的值分配给C 2 + =(添加和分配) 将右操作数添加到左操作
问题内容: 我正在使用Java,但出现错误插入“赋值运算符表达式”以完成表达式” 该错误的含义是什么?是否有所有Java错误消息的列表及其含义? 谢谢 问题答案: 根据此页面,您正在执行此操作 编写没有赋值运算符的赋值语句: Eclipse: 语法错误,插入“ AssignmentOperator表达式”以完成表达式 您应该知道编译错误消息与实现有关。以上适用于Eclipse编译器。太阳会说
我们将简单浏览一下运算符和它们的用法: 技巧 你可以交互地使用解释器来计算例子中给出的表达式。例如,为了测试表达式2 + 3,使用交互式的带提示符的Python解释器: >>> 2 + 3 5 >>> 3 * 5 15 >>> 表5.1 运算符与它们的用法 运算符 名称 说明 例子 + 加 两个对象相加 3 + 5得到8。'a' + 'b'得到'ab'。 - 减 得到负数或是一个数减去另一个数 -
首先,我想问为什么默认三向运算符的行为不同于用户定义运算符? 其次,这个问题的解决方案对于类是正确的,还是应该以不同的方式处理? 这只是一个简单的例子,我想到了更复杂的情况,有几十个字段和联合(如果您不知道我的意思,请查看一些Intel API;))。 我稍微修改了示例中的类,以便更多地描述实际生活中的问题(当默认运算符不是有效的解决方案时)。我还想澄清,我想知道这些差异背后的原因(用户定义和默认
问题内容: 正则表达式中是否存在NOT运算符?就像在那个字符串中一样: 我想删除所有但不是一年的:。 因此,正则表达式应返回的内容必须是:。 注意:类似的东西对我不起作用(某种程度上也匹配…) 问题答案: 不,没有直接的非运算符。至少不是您希望的方式。 您可以使用零宽度的负前瞻,但是: 该部分的意思是“仅在 以下 文本(因此:前瞻)与此(因此:否定) 不 匹配时才匹配。但是它实际上并不会 消耗 其