【问题标题】:Why are implicit conversion deprecated in scala?为什么在 scala 中不推荐使用隐式转换?
【发布时间】:2021-03-17 09:31:07
【问题描述】:

取自“Scala 与猫”(第 18 页):

隐式转换
使用隐式 def 创建类型类实例构造函数时,请务必将方法的参数标记为隐式参数。如果没有这个关键字,编译器将无法在隐式解析期间填写参数。 implicit 具有非隐式参数的方法形成了一种不同的 Scala 模式,称为隐式转换。这也与前面的接口语法部分不同,因为在这种情况下,JsonWriter 是具有扩展方法的隐式类。隐式转换是一种较旧的编程模式,在现代 Scala 代码中不受欢迎。幸运的是,编译器会在您执行此操作时发出警告。您必须通过在文件中导入 scala.language.implicitConversions 来手动启用隐式转换

谁能总结一下为什么不推荐使用隐式转换?有什么限制或问题?为什么隐式参数的方法更好?

注意我知道如何很好地使用现代方法,包括链接隐式和所有。我只是好奇这是什么问题以及它被弃用的原因。

【问题讨论】:

标签: scala implicit-conversion implicit


【解决方案1】:

Scala 的发明者 Martin Odersky 表示,隐式(和隐式转换)在 scala 3.1 中已被弃用,最终将完全从该语言中删除。

隐式功能将替换为扩展方法和 Givens。扩展方法和Givens 提供了一个更紧密的功能解决方案,它不会引入隐含原因的毫无戒心和隐藏的副作用。 Odersky 现在将隐式视为“灾难的秘诀”并且“过于隐式”,这是他在 3.x 中替换其功能的动机。

https://www.slideshare.net/Lightbend/scala-3-is-coming-martin-odersky-shares-what-to-know

https://hub.packtpub.com/is-scala-3-0-a-new-language-all-together-martin-odersky-its-designer-says-yes-and-no/

【讨论】:

  • 从那以后我发现了原因!我会发布具体答案。但是谷歌中有一个线程,他们强调从隐式转换到上下文绑定,原因很明显!仍然感谢您的链接
猜你喜欢
  • 2013-09-28
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 2011-09-19
  • 1970-01-01
  • 2011-01-27
相关资源
最近更新 更多