簡體   English   中英

Scala - 如何將隱式參數傳遞給 function (HOF)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM