Scala 3.0.0 首个 RC 版本发布

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

内容简介: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

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

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


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

查看所有标签

猜你喜欢:

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

并发的艺术

并发的艺术

Clay Breshears / 聂雪军 / 机械工业出版社 / 2010年9月 / 49.00元

如果你希望通过并发编程来充分发挥多核处理器的强大功能,那么本书将为你提供所需的理论知识和实际经验。《并发的艺术》是为数不多的几本介绍如何在多核处理器的共享内存模型中实现算法的书籍之一,它并非仅仅介绍一些理论模型或者分布式内存架构。本书详细分析了各种示例程序,这些内容非常有助于你将串行代码转换为并行代码,此外还介绍了如何避免一些常见的错误。 本书的作者是Intel公司的一位资深工程师,他从事并......一起来看看 《并发的艺术》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换