scala - '20 seconds' 在 Scala 中如何工作?

标签 scala duration

以下代码如何编译:

import scala.concurrent.duration._

val time = 20 seconds

这里到底发生了什么?

最佳答案

有一些事情正在发生。

首先,Scala 允许在许多方法调用中省略点和括号,因此 20 秒 相当于 20.seconds()*。

其次,应用“隐式转换”。由于 20 是一个 Int 并且 Int 没有 seconds 方法,编译器会搜索一个隐式转换,该转换需要Int 并返回确实具有一个 seconds 方法的内容,搜索受到方法调用范围的限制。

您已导入DurationInt进入你的范围。由于 DurationInt 是一个带有 Int 参数的隐式类,因此其构造函数定义了隐式 Int => DurationInt 转换。 DurationInt 有一个 seconds 方法,因此它满足所有搜索条件。因此,编译器会将您的调用重写为 new DurationInt(20).seconds**。

*我的意思是松散的。 20.seconds() 实际上是无效的,因为 seconds 方法没有参数列表,因此在方法调用时必须省略括号。

**实际上,这并不完全正确,因为 DurationInt 是一个值类,因此编译器将尽可能避免包装整数。

关于scala - '20 seconds' 在 Scala 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15104536/

相关文章:

scala - Spark : Override library method

scala - 在 IntelliJ 中运行 Scala 测试

java - 如何为 API 级别低于 26 的 LocalDateTime 添加持续时间

momentjs - 获取经过 moment diff 的分钟数

java - Java 8 中是否存在相当于 .NET Timeout.InfiniteTimeSpan 字段的无限 Duration?

java - Java 可以用来确定下载的持续时间吗?

scala - Spark 将自定义架构应用于 DataFrame

sql - 什么是 zip 连接?你有没有听说过,或者成对连接?

scala - 如何使 GroupBy 返回的 map 可变?

c++ - 如何在不使用QMediaPlayer的情况下获取Qt中音频和视频文件的持续时间