scala case类默认参数

时间:2018-01-30 10:29:13

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

如果您的Task类定义如此case class Task(uuid: String = java.util.UUID.randomUUID().toString, n: Int),则可以使用n参数创建新实例:

Task(n = 1)

答案 2 :(得分:1)

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

val task = Task(n=2)