gpt4 book ai didi

scala - Scala 可以在一个表达式中应用多个隐式转换吗?

转载 作者:行者123 更新时间:2023-12-04 22:35:26 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
How can I chain implicits in Scala?



Scala 能否在一个表达式中应用多个隐式转换?

考虑这个简单的例子:
  case class Wrapper(s: String)

case class WrapperWrapper(w: Wrapper)

implicit def string2Wrapper(s: String) = Wrapper(s)

implicit def wrapper2WrapperWrapper(w: Wrapper) = WrapperWrapper(w)

// implicit conversation --> w = string2Wrapper("w")
val w: Wrapper = "w"

// implicit conversation --> ww = wrapper2WrapperWrapper(w)
val ww: WrapperWrapper = w

// does NOT compile!
// ideally --> sad = wrapper2WrapperWrapper(string2Wrapper("ww"))
val sad: WrapperWrapper = "ww"

有没有办法让最后一行中的“双”转换起作用?

我可以通过定义另一个隐式来帮助解决问题:
implicit def string2WrapperWrapper(s:String) = wrapper2WrapperWrapper(s)

不过好像没必要……

最佳答案

恐怕我没有手的简明引用(答案分散在 The Scala Language Specification 的 6.26 和第 7 章中),但答案是 没有

这是由于实用性 - 双隐式转换将使可用转换的数量平方,大大增加了冲突的机会,并使计算给定转换会发生什么变得更加困难。

必须自己声明 StringWrapperWrapper 转换并不理想;但是考虑到您在实践中很少需要这样做,与双重隐含的潜在混淆相比,我确实认为它是两害相权取其轻。

关于scala - Scala 可以在一个表达式中应用多个隐式转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8068346/

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