gpt4 book ai didi

scala - 为什么隐式 def 需要导入 hiddenConversions 而隐式 val 不需要?

转载 作者:行者123 更新时间:2023-12-01 01:50:38 26 4
gpt4 key购买 nike

我正在读这个 tutorial ,并在底部说明

Because implicit conversions can have pitfalls if used indiscriminately the compiler warns when compiling the implicit conversion definition. To turn off the warnings take either of these actions: Import scala.language.implicitConversions into the scope of the implicit conversion definition...



如果您使用隐式 val 而不是隐式 def,则不会抛出警告。这是为什么?

换句话说,如果我执行以下操作,则不需要导入:
implicit val int2str = (i: Int) => i.toString

但是,如果我执行以下操作,则确实需要导入:
implicit def int2str(i: Int) = i.toString

- - -更新 - - -
这是一个玩具示例,它表明隐式 val 有效:
case class CoolString(coolString: String)

class RichCoolString(rich: CoolString) {
val hasCat: Boolean = rich.coolString.contains("cat")
}

object RichCoolString {
implicit val coolStringToRichCoolString = (coolString: CoolString) => new
RichCoolString(coolString)
}

scala> import RichCoolString._
import RichCoolString._

scala> CoolString("cool cats").hasCat
res0: Boolean = true

最佳答案

很可能这是一个错误,两种情况都应该有警告。至少我在规范中找不到异常。已创建 https://github.com/scala/bug/issues/10392

关于scala - 为什么隐式 def 需要导入 hiddenConversions 而隐式 val 不需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44772395/

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