Scala 使用隐式参数创建功能对象

Scala creating functional objects using implicit parameters

在 trait 中创建功能对象时如何传递隐式参数?

无法编译此代码。

case class Cache(key: Int, value: String)

trait Processor {
  val process = processF _ // error: could not find implicit value for parameter cache: Cache

  private def processF()(implicit cache: Cache): String = cache.value
}

object Main extends App with Processor {
  implicit val cache = Cache(10, "hello")

  process()
}

我希望做这样的事情:

val process: ()(implicit cache: Cache) => String = processF _ // syntax error

或者有什么可行的方法吗?

与方法不同,函数对象不能有隐式参数。

我觉得

// in Processor
def process(implicit cache: Cache) = () => processF()

// in Main
process.apply()
// or
val process1 = process
process1()

最接近你想要的。或者,

trait Processor {
  implicit val cache: Cache

  val process = processF _ // error: could not find implicit value for parameter cache: Cache

  private def processF(): String = cache.value
}