gpt4 book ai didi

用于理解/循环和类型化模式的 Scala

转载 作者:行者123 更新时间:2023-12-04 13:57:13 25 4
gpt4 key购买 nike

根据 Scala 语言规范的第 6.19 节,这个 for 循环:

for (e <-p) e'

翻译成:
p <- e.withFilter{case p => true; case _ => false}.foreach{case p => e′}

那么,为什么这个小程序:
object ForAndPatterns extends App {
class A()
class B() extends A

val list: List[A] = List(new A(), new B(), new B())

for {b: B <- list}
println(b)
}

给出了这个编译错误:
Error:(7, 13) type mismatch;
found : proves.ForAndPatterns.B => Unit
required: proves.ForAndPatterns.A => ?
for {b: B <- list}

当这个表达式:
list.withFilter{case a: B => true; case _ => false}.foreach{case b => println(b)}

没有错误。

最佳答案

你从规范中得到的翻译实际上是

list.withFilter{case b: B => true; case _ => false}.foreach{case b: B => println(b)}

但它仍然可以编译和工作。似乎 Scala 正在失去 case并翻译成
list.withFilter{case b: B => true; case _ => false}.foreach{b: B => println(b)}

这将给出相同的错误。

结果证明这是一个已知的旧错误: https://github.com/scala/bug/issues/900 .

那里提供的解决方法:
object Typed { def unapply[A](a: A) = Some(a) }

for { Typed(b: B) <- list } println(b)

关于用于理解/循环和类型化模式的 Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569550/

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