首先,我必须告诉我,我对Scala并不熟悉,最近我读了一些我不理解它是如何工作的代码。
此示例代码使用的是Future
,通常它们都需要scala.concurrent.ExecutionContext.Implicits.global
,但未在项目代码中的任何地方声明。当我尝试在IntelliJ项目中使用Future
时,它抱怨我必须在某处声明ExecutionContext
...
与import scala.collection.JavaConverters._
相同。示例代码一直在使用asScala
而不导入转换器...
是否有一种方法可以在Scala中配置这样的项目(或者可能是IntelliJ中的一个技巧)...
答案 0 :(得分:4)
在Intellij中,您可以使用快捷方式Ctrl+Shift+Alt++
(隐式提示)来找出代码中使用了哪些隐式(以及缺少哪些隐式)(它们以浅灰色显示,您可以{{1} } 在他们)。参见:https://www.jetbrains.com/help/idea/edit-scala-code.html#scala_hints
因此,如果您在激活隐式提示的情况下打开IntelliJ中不理解的代码,您将能够看到隐式定义的位置。
对于您的情况:尝试在需要隐式CTRL+click
的文件中使用import scala.concurrent.ExecutionContext.Implicits.global
。
是否有一种方法可以在Scala中配置这样的项目(或者可能是IntelliJ中的一个技巧)...
否,您必须在范围内的某个位置定义隐式或导入它们。 (同伴对象也适用)。请阅读以下内容以获得更详细的说明:https://docs.scala-lang.org/tour/implicit-parameters.html
答案 1 :(得分:4)
我不认为这与IntelliJ有关。
一种可能的解释是,您引用的代码在某个全局导入的范围(例如package object
)中声明了这些隐式变量。在这种情况下,包的任何成员都将看到在此对象中声明的隐式对象。