首先, 在the book中的函数章节里, let
关键字一般是用来组成一条赋值语句(statement)的, 比如let a = 3;
, 而语句不返回值,
但是, 后续的枚举和模式匹配这章里却告诉我下面这代码成立
let value = Some(3);
if let Some(i) = value {
println!("i is {}", i);
} else {
println!("error");
}
也就是说let Some(i) = value
这是个返回bool
值的表达式(expression),
可这不是和说的之前有矛盾了吗?
该怎么去理解呢?
1
共 7 条评论, 1 页
评论区
写评论if let -> iflet
谢谢, 我去了解下!!
--
👇
asuper: if let 理解成模式匹配,而不是if,推荐看这本书
if let 理解成模式匹配,而不是if,推荐看这本书
单个 let 是一条语句,if let 合起来是一个表达式。
reference 里给了明确的定义:
let statements
if let expressions
if let Some(i) = value,我理解是 value如果匹配Some(),则声明一个变量i,把 value 的值赋值给 i。
我是把if let理解为一个新的语法结构,不能按let语法去想吧 if let { ... }
要不是看见的帖子我还没想过有人会这么想哈哈。
let Some(_) ...
不能理解成bool表达式,否则显然你可以把需要bool值的表达式替换成let ...
而不出现句法错误,比如if false || let Some(a) = 1_u8.check_sub(10)
. 往下看看多写写模式匹配的代码大概就明白了,我也不确定该怎么表述🤦