标量和隐式导入?

时间:2019-03-21 10:48:19

标签: scala intellij-idea implicit

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

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

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

是否有一种方法可以在Scala中配置这样的项目(或者可能是IntelliJ中的一个技巧)...

2 个答案:

答案 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)中声明了这些隐式变量。在这种情况下,包的任何成员都将看到在此对象中声明的隐式对象。