總之,你不能。
這裏是你的選擇:
轉發implicits
假設你有一個執行Future
的功能,你需要一個ExecutionContext
: 您可以import scala.concurrent.ExecutionContext.Implicits.global
(或自定義等等)在如果你不想在日進口
import scala.concurrent.ExecutionContext.Implicits.global
def someFun(): Future[SomeThing] = {
Future(something)
}
或者:同一個文件someFun
,你會得到這個e與someFun
相同的文件(類,對象等),則轉發該隱式。這樣,您可以在其他文件中使用someFun
時將其導入。
def someFun()(implicit ex: ExecutionContext): Future[SomeThing] {
Future(someThing)
}
語境界定
聽起來這是你想要的,只有你沒有正確地執行它。
class Stub[T](name: String)
def myFunc[T: Moo](stub: Stub[T]) = {
println(stub + " " + implicitly[Moo[String]])
}
以上是等價的:
def myFunc[T](stub: T)(implicit evidence: Moo[T]) = {
println(stub + " " + evidence.toString)
}
查看邊界
或者,如果它更有意義隱式轉換Stub
爲Moo
,而不是束縛:
def myFunc[T <% Moo](stub: T) = {
println(stub + " " + implicitly[Moo[T]])
}
要使用上述內容,您需要提供物化含義(例如將存根轉換爲Moo的方法)。例如:
implicit def stubToMoo[T](stub: Stub[T]): Moo[T] = {
new Moo(stub) // or whatever
}
底線,在您的問題中使用implicits是沒有任何意義的。您可以按照您所描述的方式執行「精簡」導入,但根據上述選項,看看它是否值得。
重點是該值已被聲明爲隱式。我希望它是隱含的,因爲我不想回過頭幾英寸的代碼將它添加到調用鏈中每個函數的參數中。我給出的代碼不是實際的代碼,只是一個例子。 – Zuriar
@ user3231690如果它是隱含的,您也可以直接訪問它 – serejja
如何直接訪問它? – Zuriar