- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在看 Rust 引用书,它指出元组结构是“refutable when one of its subpatterns is refutable”。它还指出,当“the subpattern is not specified”时,标识符模式是无可辩驳的。
鉴于此,如果我创建一个具有单个不可辩驳的标识符子模式的元组结构模式,我希望元组结构模式也是无可辩驳的,因为它的子模式都是无可辩驳的。
pub fn main() {
enum Foo {
Bar(i32),
Baz(i32),
}
// Compiler says Foo::Bar(x) is a refutable pattern
// but the reference book suggests it is irrefutable
let Foo::Bar(x) = Foo::Bar(50);
}
上面代码的 AST 确认 Foo::Bar(x)
是一个元组结构模式,而 x
是一个标识符模式。我觉得这里的编译器是正确的,但是引用书表明 Foo::Bar(x)
尽管编译器是无可辩驳的。
我了解在考虑到多种可能的枚举变体以及 if let
或类似内容如何在这里提供帮助的情况下阻止可反驳模式的必要性,但我对矛盾的引号感到困惑。
这是我遗漏的事情,还是引用书的问题?
最佳答案
Foo::Bar(50)
的类型是 Foo
,就像 4
的类型一样是 i32
.
看看这个:
let 4 = 4;
error[E0005]: refutable pattern in local binding: `i32::MIN..=3_i32` and `5_i32..=i32::MAX` not covered
--> src/main.rs:2:9
|
2 | let 4 = 4;
| ^ patterns `i32::MIN..=3_i32` and `5_i32..=i32::MAX` not covered
|
= note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
= note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
= note: the matched value is of type `i32`
这是可以反驳的,因为 4
的 类型右边是i32
.该值与可反驳性无关。一切都与类型有关。
还有 let 4 = <i32>
是可反驳的,因为 <i32>
可能是不同于 4
的值.
我认为 refutability
只讨论类型,不讨论值。
当然,我不是理论语言专家,所以我可能完全不在话下。但这就是我对可反驳性的理解。
关于rust - 为什么编译器认为这种元组结构模式是可反驳的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73325676/
到目前为止,包括 CSS 重置是我在网页设计之初的标准步骤。 我曾经听说过这样的观点,不好;但是我没有机会问那个说这话的人是什么原因。 现在我想知道您可以指定哪些缺点。 最佳答案 在许多情况下,使用
我在完全理解如何证明以下某些陈述时遇到了问题。 例如我有一个声明:n^2logn = O(n^2) .如果我错了请纠正我,但这表明 n^2是bigO的 n^2logn .意思是n^2增长速度超过 n^
我是一名优秀的程序员,十分优秀!