我有以下方法:
def firstAndLast[CC, A, That](seq: CC)(implicit asSeq: CC => Seq[A], cbf: CanBuildFrom[CC, A, That]): That = {
val b = cbf(seq)
b += seq.head
b += seq.last
b.result
}
见:Method taking Seq[T] to return String rather than Seq[Char]为理由。在第一种情况下它就像一个魅力,但在第二种情况下无法编译:
List("abc", "def") map {firstAndLast(_)}
List("abc", "def") map firstAndLast
给予:
error: No implicit view available from CC => Seq[A].
List("abc", "def") map firstAndLast
知道如何改进此声明以避免额外包装吗?似乎 eta-expansion 是问题所在(?)
最佳答案
不是你问题的完整答案,但我刚刚注意到这有效:
List("abc", "def") map firstAndLast[String, Char, String]
这意味着类型推断器无法为
firstAndLast
确定正确的类型参数。 ,但我不知道如何解决它......
关于scala - 采用隐式 CanBuildFrom 的方法不适用于 eta-expansion?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774284/