scala - 采用隐式 CanBuildFrom 的方法不适用于 eta-expansion?

标签 scala scala-collections

我有以下方法:

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/

相关文章:

scala - 计时器示例

Scala:zipped 产生什么,为什么可以成对映射?

scala - Scala 中两个 map 的交集和合并/连接

java - Apache ServiceMix 7,ScalaDSL,未找到方案 : jetty 的组件

scala-使用 "diverging implicit expansion"时出现令人困惑的 "sortBy"错误

scala - 对元组进行分组和平均

scala - 如何用尾部映射列表项[Scala]

scala - 在 REPL 中将代码扩展为原始 AST Scala 3

string - Scala 字符串按字符数量递减分割

scala - 什么是 Map.compute 在 scala.collection.mutable.Map 中的等效功能