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

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

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


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

查看所有标签

猜你喜欢:

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

Beginning XML with DOM and Ajax

Beginning XML with DOM and Ajax

Sas Jacobs / Apress / 2006-06-05 / USD 39.99

Don't waste time on 1,000-page tomes full of syntax; this book is all you need to get ahead in XML development. Renowned web developer Sas Jacobs presents an essential guide to XML. Beginning XML with......一起来看看 《Beginning XML with DOM and Ajax》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

UNIX 时间戳转换