使用 -Yno-predef 标志展平 scala.immutable.Seq

Flattening scala.immutable.Seq with -Yno-predef flag

我正在使用带有 -Yno-predef 标志的自定义 Predef。它基本上是 SlamData's one.

的副本

当我尝试展平嵌套的不可变 Seqs 集合时,我收到错误消息:

No implicit view available from my.Predef.Seq[String] => scala.collection.GenTraversableOnce[String].

如果我输入import scala.Predef._,它会再次编译。我试图调查 scala.Predefscala 包对象,但是当我试图复制 TraversableOnceTraversableSeq 的定义时,它没有帮不上忙。

有人知道 vanilla predef 的哪一部分负责生成这个隐式吗?

经过一番挖掘,我发现我遗漏的是:

type <:<[-From, +To] = scala.Predef.<:<[From, To]
implicit def $conforms[A]: A <:< A = scala.Predef.$conforms[A] 

显然,在伴生对象中的所有类型 class 派生中使用隐式证据是必需的。

您正在寻找 Predef.$conforms.

一种解决方法是在命令行上输入 运行 scala -Xprint:typer -e 'Seq(Seq(1)).flatten'。 它将打印整个语法树,并解析所有隐含内容。