scala - Scala: 为什么不能将接受 Seq [Char]的函数映射到字符串集合

  显示原文与译文双语对照的内容
0 0

我可以定义一个函数,该函数接受一个 Seq[Char]

def f(s: Seq[Char]) = s

并且它的运作方式,假如我传入一个 String:

scala> f("this")
res8: Seq[Char] = this

这意味着我可以把它用在 map:

scala> List("this").map(s => f(s))
res9: List[Seq[Char]] = List(this)

那么为什么我不可以这样做:?

scala> List("this").map(f)
<console>:10: error: type mismatch;
 found   : Seq[Char] => Seq[Char]
 required: java.lang.String => ?
              List("this").map(f)
                               ^
时间:原作者:2个回答

0 0

你不能这么做,因为没有提升的隐式转换 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.

原作者:
0 0

可能是解决此问题的最好方法是:

def f[S <% Seq[Char]](s: S): S = /* some code */

然后, map然后朋友按预期的那样工作。

原作者:
...