scala case 类默认参数

标签 scala

我在一些源代码中遇到了以下定义:

case class Task(uuid: String = java.util.UUID.randomUUID().toString, n: Int)

这里第一个参数声明为默认值,但我不明白如何使用这个默认值创建实例。
如果我不能传递像 Task(1) 这样的第一个参数那么我肯定会得到编译错误。

但是,以下更改工作正常:
case class Task(n: Int, uuid: String = java.util.UUID.randomUUID().toString)

但在这里,正如定义中所示,uuid是第一个参数。

最佳答案

在 Scala 函数中,无论何时省略参数(对于默认值),都需要为以下所有参数(如果提供)提供名称。

所以,如果你给出了一个像下面这样的函数,

def abc(i1: Int, i2: Int = 10, i3: Int = 20) = i1 + i2 + i3

您可以通过以下方式使用它,
abc(1)

abc(1, 2)

abc(1, 2, 3)

但是如果你想使用 i2 的默认值并为 i3 提供一个值,那么,
abc(1, i3 = 10)

所以,在你的情况下,你可以像下面这样使用它,
val task = Task(n = 100)

关于scala case 类默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519191/

相关文章:

scala - 为什么 scala 在此模运算中返回超出范围的值?

scala - SQueryL波浪号运算符有什么作用?

java - Scala 中的 java "Object"类等效项

Scala:已弃用集差的替代方案

python - 如何使用 scala 或 python 在 apache spark 中运行多线程作业?

java - 哪些 Scala 语句或代码可以生成无法转换为 Java 的字节码?

list - Future[List[Error\/Double]] 到 Future[[List[Error]\/List[Double]] 在 Scala 中

java - Apache Spark 我在这里坚持了什么?

scala - 如何在Spark SQL中使用连字符对列名进行转义

scala - 列表中的前 n 个项目(包括重复项)