[英]Scala - how to pass implicit parameter into function (HOF)?
我有一個像這樣的 function:
def getSomething: (String, Future[String]) => String = {
case (name, surname) if (name == "Joe", surname.map(s => s == "Doe")) => "Is ok"
}
但是編譯器說他需要在map
function 中的executionContext
。 我試圖做一些魔術:
def getSomething (implicit e: ExecutionContext): (String, Future[String]) => String{...}
或者
def getSomething: (String, Future[String])(implicit e: ExecutionContext) => String{...}
但它不起作用。 是否可以像這樣將隱式參數傳遞給 function ? 或者我可以用其他方式嗎?
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 中,我們可以返回帶有隱式參數的 function,例如
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"))
注意 function 類型中的?=>
如何對應於 function 文字中的using
。 考慮從Change to (using x: T) => E
for context functions #8305的例子
val f: Int ?=> Int = (using x: Int) => 2 * x
f(using 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.