< 返回版块

5angXR 发表于 2024-05-27 14:56

首先, 在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), 可这不是和说的之前有矛盾了吗?

该怎么去理解呢?

评论区

写评论
yuncai836 2024-06-07 11:04

if let -> iflet

作者 5angXR 2024-05-27 17:49

谢谢, 我去了解下!!

--
👇
asuper: if let 理解成模式匹配,而不是if,推荐看这本书

asuper 2024-05-27 17:39

if let 理解成模式匹配,而不是if,推荐看这本书

全称量词 2024-05-27 17:08

单个 let 是一条语句,if let 合起来是一个表达式。

reference 里给了明确的定义:

let statements

if let expressions

zg9uagfv 2024-05-27 15:49

if let Some(i) = value,我理解是 value如果匹配Some(),则声明一个变量i,把 value 的值赋值给 i。

oywz 2024-05-27 15:24

我是把if let理解为一个新的语法结构,不能按let语法去想吧 if let { ... }

aj3n 2024-05-27 15:16

要不是看见的帖子我还没想过有人会这么想哈哈。 let Some(_) ...不能理解成bool表达式,否则显然你可以把需要bool值的表达式替换成let ...而不出现句法错误,比如if false || let Some(a) = 1_u8.check_sub(10). 往下看看多写写模式匹配的代码大概就明白了,我也不确定该怎么表述🤦

1 共 7 条评论, 1 页