|
|
1
2
箭头左侧的句法结构不是一个普通的表达式,而是一个模式。为了方便起见,它看起来非常像一个表达式,但其行为却非常不同。它也是一个纯编译时构造。
例如,模式
例如,如果你要匹配的值是
除了可以方便地将值绑定到模式中的名称之外,不允许模式中的运行时值还允许编译器保证模式匹配的详尽性,并在编译时对其进行优化。如果模式中允许运行时值,则必须始终提供通配符模式来捕获其余的可能性,因为在编译时无法知道哪些可能性在运行时可能匹配。
我希望你现在明白为什么不允许像
然而,有一个独立于模式的构造允许在模式匹配中使用运行时条件,称为“guards”或“when”子句。用你的例子:
这确实需要一个用通配符代替
|
|
Daniel · C#编译器在应该出错时失败 1 年前 |
|
|
Floris · 为什么cpp编译器在类型声明不正确时要转换为int? 1 年前 |
|
obtein · 内存流。写在客户端上有效,但在服务器上无效? 1 年前 |
|
|
kamkow1 · 匿名结构的初始值设定项错误无效 1 年前 |