gpt4 book ai didi

scala - Scala 和变量中的模式匹配

转载 作者:行者123 更新时间:2023-12-01 10:30:47 25 4
gpt4 key购买 nike

我是 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的引用,这样你就可以通过b.i访问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 :

A pattern binder x @ p consists of a pattern variable x and a pattern p. The type of the variable x is the static type T of the pattern p. This pattern matches any value v matched by the pattern p, provided the run-time type of v is also an instance of T, and it binds the variable name to that value.

case c: Cls 被称为 Typed Patterns :

A typed pattern x:T consists of a pattern variable x and a type pattern T. The type of x is the type pattern T, where each type variable and wildcard is replaced by a fresh, unknown type. This pattern matches any value matched by the type pattern T; it binds the variable name to that value

关于scala - Scala 和变量中的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42907863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com