Scala 3.0.0 首个 RC 版本发布

栏目: 软件资讯 · 发布时间: 3年前

内容简介: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)asas也可以在大括号外使用。例如:

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

这种方式比简单地写一个下划线更简洁易读。

除此之外还有关于元编程和语言方面的变更,详情查看发布公告


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Persuasive Technology

Persuasive Technology

B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95

Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具