Scala和隐式导入?

问题描述 投票:2回答:2

首先,我必须告诉我,我不熟悉Scala,最近我读了一些代码,我不明白它是如何工作的。

此示例代码使用的是Future,通常它们都需要scala.concurrent.ExecutionContext.Implicits.global,但在项目代码中没有声明。当我尝试在我的IntelliJ项目中使用Future时,它抱怨我必须在某处声明一个ExecutionContext ...

同样的import scala.collection.JavaConverters._。示例代码一直使用asScala而不导入转换器...

有没有办法在Scala中配置这样的项目(或者可能是IntelliJ中的技巧)...

scala intellij-idea implicit
2个回答
4
投票

我认为这与IntelliJ无关。

一种可能的解释是,您引用的代码在某些全局导入的范围中声明了这些含义,如package object。在这种情况下,包的任何成员都将看到在此对象中声明的含义。


4
投票

在Intellij中,您可以使用快捷方式Ctrl+Shift+Alt++(隐式提示)来查找代码中使用的含义(以及缺少的含义)(它们以浅灰色显示,您可以在它们上面使用CTRL+click)。见:https://www.jetbrains.com/help/idea/edit-scala-code.html#scala_hints

因此,如果您继续打开IntelliJ中未理解的代码并激活隐式提示,您将能够看到隐含定义的位置。

对于您的情况:尝试在您需要隐含的import scala.concurrent.ExecutionContext.Implicits.global的文件中使用ExecutionContext

有没有办法在Scala中配置这样的项目(或者可能是IntelliJ中的技巧)...

不,您必须在范围内的某处定义implicits或导入它们。 (伴随对象也适用)。阅读本文以获得更详细的解释:https://docs.scala-lang.org/tour/implicit-parameters.html

© www.soinside.com 2019 - 2024. All rights reserved.