Scala - 如何将隐式参数传递给函数(HOF)?

Scala - how to pass implicit parameter into function (HOF)?

我有这样的功能:

def getSomething: (String, Future[String]) => String = {
    case (name, surname) if (name == "Joe", surname.map(s => s == "Doe")) => "Is ok"
}

但是编译器说他需要 executionContext 这里的 map 函数。我试着用以下方法施展魔法:

def getSomething (implicit e: ExecutionContext): (String, Future[String]) => String{...}

 def getSomething: (String, Future[String])(implicit e: ExecutionContext) => String{...}

但它不起作用。是否可以将隐式参数传递给这样的函数?或者我可以用其他方式做到吗?

def getSomething (implicit e: ExecutionContext): (String, Future[String]) => String = ...

应该可以。

你不能写

(String, Future[String]) => (implicit e: ExecutionContext) => String

隐式函数将出现在 Scala 3 中。

http://dotty.epfl.ch/docs/reference/contextual/context-functions.html

http://dotty.epfl.ch/blog/2016/12/05/implicit-function-types.html

在 Scala 3 中,我们可以 return 带有隐式参数的函数,例如

def getSomething: ExecutionContext ?=> Future[String] => Future[Int] = {
  (using ec: ExecutionContext) => (f: Future[String]) => f.map(_.toInt)
}

given fiveThreadsEc as ExecutionContext = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(5))
getSomething(Future("42"))

注意函数类型中的 ?=> 与函数字面量中的 using 是如何对应的。考虑来自 Change to (using x: T) => E for context functions #8305

的示例
val f: Int ?=> Int = (using x: Int) => 2 * x
f(using 2)