gpt4 book ai didi

scala - 为什么当 scala.language.implicitConversions 不是最后一次导入时发出警告?

转载 作者:行者123 更新时间:2023-12-03 18:13:37 25 4
gpt4 key购买 nike

在我的 Scala 代码中,我有一些隐式转换,并且我有必要的导入:

import scala.language.implicitConversions

但是,有时在此之后进行另一次导入时,我收到警告,好像导入根本不存在:

Warning:(112, 18) implicit conversion method pair2Dimension should be enabled by making the implicit value scala.language.implicitConversions visible.



build.sbt:
name := "ImplicitSBT"

version := "1.0"

scalaVersion := "2.11.5"

scalacOptions ++= Seq("-deprecation","-feature")

libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "1.0.1"

Main.scala:
import scala.language.implicitConversions
import scala.swing.{Action, _}

object Main extends App {

implicit def pair2Dimension(pair: (Int, Int)): Dimension = new Dimension(pair._1, pair._2)

val dim : Dimension = (0,0)

println(dim)


}

为什么会发生这种情况?怎么样 import scala.swing.{Action, _}隐藏 implicitConversions进口?

最佳答案

How is import scala.swing.{Action, _} hiding the implicitConversions import?



您的:
import scala.language.implicitConversions

... 被 implicitConversions 遮住了 definedscala.swing包对象:
package scala

...

package object swing {

...

implicit lazy val implicitConversions = scala.language.implicitConversions

...

}

由于您在此处使用通配符导入:
import scala.swing.{Action, _}

... scala.swing.implicitConversionsscala.swing 导入最后是阴影 scala.language.implicitConversions .

有趣的问题是:为什么 scalac如果有两个“功能标志”(在本例中为 implicitConversions),一个在同一级别遮蔽另一个,则无法确定语言功能已启用。

这可能是一个错误以及如何 SIP 18 的细节被执行。

无论如何,要解决此问题,我建议您执行以下操作之一:
  • 不进口 scala.language.implicitConversions (因为它在通配符导入时已经导入 scala.swing )
  • 不要从 scala.swing 进行通配符导入(不要污染你的范围并导入你需要的东西)
  • 做另一个 implicitConversions 的导入(没有被另一个隐藏)在您的 Main对象级别
  • 关于scala - 为什么当 scala.language.implicitConversions 不是最后一次导入时发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27942143/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com