Scala 3 新特性:自傲的上下文抽象

翻译Scala 3 新特性系列文章, 这一篇是讲Scala 3 的 上下文抽象, 官方用了Opinionated的这个词, 文面上意思:自以为是, 我觉得翻译为 自傲 更合适, 一方面,很骄傲别人没有, 我有, 另外一方面, 我比以前更强大了, 所以翻译成: 自傲的上下文抽象

 

Scala的一个基本的核心概念是(现在在某种程度上仍然是)为用户提供一小套强大的功能,这些功能可以组合成巨大的(有时甚至是不可预见的)表现力。例如, implicits(隐式转换) 这个特性已经被用来模拟上下文抽象、表达类型级计算、模拟类型类、执行隐式强制、编码扩展方法等等。从这些用例中学习,Scala 3采用了一种稍有不同的方法,关注意图而不是机制。Scala 3没有提供一个非常强大的功能,而是提供了多个量身定制的语言功能,允许程序员直接表达他们的意图。

  • 提取上下文信息 使用子句可以让程序员抽象出调用上下文中可用的、应该隐式传递的信息。作为对Scala 2 implicits的改进,[Using clauses ]using子句可以通过类型来指定,将函数签名从从未明确引用的术语变量名中解放出来。
  • 提供类型类实例 [Given instances ] 给定实例允许程序员定义某个类型的规范值。这使得使用类型类的编程更加直接,而不会泄露实现细节。
  • 追溯性扩展类。在Scala 2中,扩展方法必须使用隐式转换或隐式类进行编码。相比之下,在Scala 3中,[extension methods ] 扩展方法现在直接内置到语言中,从而导致更好的错误信息和改进的类型推理。
  • 将一个类型视为另一个类型。[Implicit conversion] 隐式转换从头开始被重新设计为类型类Conversion的实例。
  • 更高阶的上下文抽象。[context functions ]上下文函数的全新功能使上下文抽象成为一流的公民。它们是库作者的重要工具,允许表达简洁的特定领域语言。
  • 来自编译器的可操作反馈。[import suggestions ]如果一个隐式参数不能被编译器解决,它现在为你提供可能解决问题的导入建议。

分类: 编程语言 标签: 发布于: 2020-12-26 19:53:45, 点击数: