我在一些源代码中遇到了以下定义:
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/