Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala案例类默认参数_Scala - Fatal编程技术网

scala案例类默认参数

scala案例类默认参数,scala,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().t

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

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

如果您有这样定义的
Task
case-class-Task(uuid:String=java.util.uuid.randomuid().toString,n:Int)
,那么您只能用
n
参数创建新实例,方法如下:

Task(n = 1)

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

所以,如果你给出一个如下的函数

def abc(i1: Int, i2: Int = 10, i3: Int = 20) = i1 + i2 + i3
val task = Task(n = 100)
您可以通过以下方式使用它

abc(1)

abc(1, 2)

abc(1, 2, 3)
但是如果您想使用默认值i2并为i3提供一个值

abc(1, i3 = 10)
所以,在你的情况下,你可以像下面这样使用它

def abc(i1: Int, i2: Int = 10, i3: Int = 20) = i1 + i2 + i3
val task = Task(n = 100)

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

val task=task(n=2)