我是 Scala 的新手,有点想知道模式匹配是如何工作的。想象一下我有以下内容:
case class Cls(i: Int)
case b @ Cls(i) => //Ok
case e : Cls => //Ok
case f @ Cls => //Ok
case s: Cls(i) => //compile error
case str: String => //ok
我不太明白在哪里使用
@
以及在哪里使用 :
。是否有一些严格定义的规则? 最佳答案
当您想将整个匹配类型绑定(bind)到一个值,但又想绑定(bind)类型内的单个元素时,请使用 @
。这意味着:
case b @ Cls(i) =>
将
b
分配给 Cls
的引用,以便您可以通过 i
访问 b.i
值。它还将 i
绑定(bind)到构造函数模式的第一个参数,它的类型是 Int
。当您需要评估类型的单个值但还需要对类的整个引用时,这很有用,即:case b @ Cls(i) => if (i > 10) b else b.copy(i = 10)
如果您只想将
Cls
的整个引用绑定(bind)到一个新值,请使用 :
case e: Cls =>
这将对
Cls
的引用绑定(bind)到 e
。如果我们想要更正式一点,
case f @ Cls
被称为 Pattern Binders :case c: Cls
被称为 Typed Patterns :关于scala - Scala 中的模式匹配和变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42907863/