gpt4 book ai didi

scala - 为什么隐式def而不是类需要隐式转换?

转载 作者:行者123 更新时间:2023-12-03 08:49:46 25 4
gpt4 key购买 nike

据我了解,隐式转换可能导致难以理解的代码,或遭受其他问题(甚至是错误?)困扰的代码,这就是为什么它们需要显式启用才能在代码中使用而不会收到警告。

但是,考虑到隐式转换在很大程度上(如果不是大部分时间)用于将一个对象与另一种类型的对象包装在一起,隐式类也是如此(如果我错了,请多指教我,我们将不胜感激,)为什么前者需要导入scala.language.implicitConversions,而后者则不需要?

object Main extends App {
implicit class StringFoo(x: String) {
def fooWithImplicitClass(): Unit =
println("foo with implicit class")
}
// => silence.

"asd".fooWithImplicitClass()

/************************/

class Foo(x: String) {
def fooWithImplicitDef(): Unit =
println("foo with implicit def")
}
implicit def string2Foo(x: String) = new Foo(x)
// => warning: implicit conversion method string2Foo should be enabled

"asd".fooWithImplicitDef()
}

最佳答案

隐式类仅有效地添加了新方法(或特征),并且仅在调用这些添加的方法时才使用它们(或显式使用隐式类,但这在实践中很少发生)。另一方面,对现有类型的隐式转换可以在程序员看不到的情况下被调用。

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

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