内容简介:Scala 3.0.0 首个预览版本已发布,此版本旨在进行最后阶段的打磨、代码清理和修改。此外还有可用于改进开发体验的语言方面变更,以及针对元编程框架 (Metaprogramming) 的优化。 支持在扩展方法中使用辅助类型参数...
Scala 3.0.0 首个预览版本已发布,此版本旨在进行最后阶段的打磨、代码清理和修改。此外还有可用于改进开发体验的语言方面变更,以及针对元编程框架 (Metaprogramming) 的优化。
支持在扩展方法中使用辅助类型参数列表
扩展的类型参数现在可以与方法本身的类型参数相结合。例如:
List(1, 2, 3).second[Int]
extension [A](xs: List[A])
def sumBy[B](f: A => B)(using Numeric[B]): B = ...
与方法类型参数相匹配的类型参数可以照常传递:
List("a", "bb", "ccc").sumBy[Int](_.length)
相比之下,只有当方法被引用为非扩展方法时,才可以传递与扩展后的类型参数相匹配的类型参数:
sumBy[String](List("a", "bb", "ccc"))(_.length)
或者,当传递两个类型参数时:
sumBy[String](List("a", "bb", "ccc"))[Int](_.length)
查看文档了解跟更多关于扩展方法的信息。
引入新的import语法
以下是此版本中对import语法的更改:
通配符导入符号_被替换为*,原因是大多数其他语言都使用*。
import scala.annotation.* // imports everything in the annotation package
重命名运算符=>将替换为软关键字(soft keyword)as。as也可以在大括号外使用。例如:
import scala.collection.mutable as mut
import NumPy as np
使用uninitialized进行通配符初始化
在 var 定义中使用了晦涩的_用法:
var x: T = _
此处定义了一个没有初始值的具体变量 x,或者说是 JVM 分配给对象字段的默认初始值。它只能在类或对象中使用,而不能用来初始化一个局部变量。
对于这种惯常用法,Scala 开发团队想出了一种更好的表达方式:在scala.compiletime 对象中使用特殊的uninitialized值。如需获取未初始化的字段,可以这样写:
import scala.compiletime.uninitialized
var x: A = uninitialized
这种方式比简单地写一个下划线更简洁易读。
除此之外还有关于元编程和语言方面的变更,详情查看发布公告。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- IJPay 0.8 版本发布,兼容低版本 JDK
- fastjson 1.2.55 版本发布,Bug 修复版本
- Apache Ignite 2.9.1 版本发布,小版本更新
- Swoole v4.6.1 版本发布,Bug 修复版本
- Swoole v4.6.2 版本发布,Bug 修复版本
- Swoole v4.6.4 版本发布,Bug 修复版本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
集创思维设计矩阵
慈思远 / 电子工业出版社 / 2017-4 / 72.00元
《集创思维设计矩阵——写给互联网人的设计指南》总结了作者从业7年以来的设计经历,在大量企业所面对的设计问题基础上,提出了枪型思维,即如何给产品更准确的定位。 在定位准确的基础上加以设计,提出了设计中高维度融合低维度的设计思维,即设计者可以从商业逻辑推演到设计逻辑,让设计更加精确;又提出了设计和计算的博弈,指出在每一步创新的基础上,设计者一定要清晰地评判设计的代价。这样设计后的产品才是可以和企......一起来看看 《集创思维设计矩阵》 这本书的介绍吧!