scala 列表匹配

发布于 2024-09-16 10:09:23 字数 445 浏览 6 评论 0原文

List(1,2) match {
  case List(1,_) => println("1 in postion 1")
  case _ => println("default")
}

编译/工作正常。 所以这样做

List(1) match ...
List(3,4,5) match ...

,但不这样做

List() match ...

会导致以下错误

found : Int(1)
required : Nothing
             case List(1,_) => println("1 in postion 1")

为什么 List() 尝试匹配 List(1,_)?

List(1,2) match {
  case List(1,_) => println("1 in postion 1")
  case _ => println("default")
}

compiles / works fine.
So do

List(1) match ...
List(3,4,5) match ...

but not

List() match ...

which results in the following error

found : Int(1)
required : Nothing
             case List(1,_) => println("1 in postion 1")

Why does List() try to match List(1,_)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

往日情怀 2024-09-23 10:09:23

List() 的类型为 List[Nothing]。如果您使用 List[Int]() 它将按您的预期工作。

(一般来说,类型具有尽可能多的限制性;由于您创建了一个其中没有任何内容的列表,因此使用最受限制的类型 Nothing 而不是 Int如您所愿。)

List() has type List[Nothing]. If you use List[Int]() it will work as you expect.

(In general, types are as restrictive as they can possibly be; since you have made a list with nothing in it, the most-restrictive-possible type Nothing is used instead of Int as you intended.)

娇女薄笑 2024-09-23 10:09:23

当您编写 List() 时,推断的类型是 Nothing,它是所有内容的子类型。

发生的情况是,当您尝试不可能的匹配时,Scala 会给出错误。例如,"abc" match { case 1 =>; } 将导致类似的错误。同样,由于可以静态确定 List(1, _) 永远不会匹配 List(),因此 Scala 会给出错误。

When you write List(), the type inferred is Nothing, which is subtype to everything.

What is happening is that Scala gives an error when you try impossible matches. For example, "abc" match { case 1 => } will result in a similar error. Likewise, because List(1, _) can be statically determined to never match List(), Scala gives an error.

一梦等七年七年为一梦 2024-09-23 10:09:23

也许是因为...

scala> implicitly[List[Nothing] <:< List[Int]]
res3: <:<[List[Nothing],List[Int]] = <function1>

scala> implicitly[List[Int] <:< List[Nothing]]
<console>:6: error: could not find implicit value for parameter e:<:<[List[Int],List[Nothing]]
       implicitly[List[Int] <:< List[Nothing]]

Maybe because...

scala> implicitly[List[Nothing] <:< List[Int]]
res3: <:<[List[Nothing],List[Int]] = <function1>

scala> implicitly[List[Int] <:< List[Nothing]]
<console>:6: error: could not find implicit value for parameter e:<:<[List[Int],List[Nothing]]
       implicitly[List[Int] <:< List[Nothing]]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文