内容简介: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 修复版本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。