Scala案例类默认参数

4

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

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是第一个参数。

3个回答

8
在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)

3
如果你有一个定义为case class Task(uuid: String = java.util.UUID.randomUUID().toString, n: Int)的类,那么你只能通过提供n参数来创建一个新实例:
Task(n = 1)

1
这里的重点是:如果你有一个接受n个参数的类/方法定义,但你只需要传递1到n-1个参数;你可以使用带等号符号的参数名称,然后是你想要传递的参数值,所以在你的情况下: val task = Task(n=2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接