我在一些源代码中面对以下定义:
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
是第一个参数。
答案 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)