Scala:为什么我不能在一个字符集上映射一个接受Seq [Char]的函数

dhg*_*dhg 13 scala implicit-conversion

我可以定义一个接受a的函数 Seq[Char]

def f(s: Seq[Char]) = s
Run Code Online (Sandbox Code Playgroud)

如果我通过一个String:

scala> f("this")
res8: Seq[Char] = this
Run Code Online (Sandbox Code Playgroud)

这意味着我可以在一个map:

scala> List("this").map(s => f(s))
res9: List[Seq[Char]] = List(this)
Run Code Online (Sandbox Code Playgroud)

那我为什么不能这样做呢?:

scala> List("this").map(f)
<console>:10: error: type mismatch;
 found   : Seq[Char] => Seq[Char]
 required: java.lang.String => ?
              List("this").map(f)
                               ^
Run Code Online (Sandbox Code Playgroud)

Rex*_*err 11

你不能这样做,因为没有推广的隐式转换的A => BF[A] => F[B].特别是,f实际上是一个类型的实例Seq[Char] => Seq[Char],你需要隐式转换String => Seq[Char]才能生成一个函数String => Seq[Char].Scala不执行两步隐式转换,例如此操作.

如果你写s => f(s),Scala可以自由地调整类型,以便在传入之前s转换Seq[Char]f.