如何跳过Scala中的可选参数?

时间:2015-10-28 22:09:02

标签: scala

使用可选参数给出以下函数:

def foo(a:Int = 1, b:Int = 2, c:Int = 3) ...

我想保留 a 的默认值,但只能通过位置分配(而不是通过位置分配)将新值传递给 b c 命名赋值),这是以下任何一种语法都很好:

foo( , 5, 7)
foo(_, 5, 7)

Scala可以做到这一点吗?

3 个答案:

答案 0 :(得分:13)

无法跳过参数,但您可以在调用_thumbnail.jpg方法时使用命名参数,例如:

foo

编辑 - 您具体询问了如何通过位置分配来执行此操作:这在Scala中是不可能的。

答案 1 :(得分:4)

您可以创建另一个功能,并应用其中一个参数。

def long(a: Int = 1, b: Int = 2, c: Int = 3) = a + b + c

def short(x: Int, y: Int) = long(b = x, c = y)

val s = short(10, 20) // s: Int = 31

答案 2 :(得分:1)

解决方案(远非漂亮)可能是Currying

您需要稍微更改方法签名:

// Just for "a" parameter

def foo(a: Int = 1)(b: Int = 2, c: Int = 3)

foo()(2,3)   // 6
foo(1)(2,3)  // 6
foo(2)(2,3)  // 7

对于所有参数:

def foo(a: Int = 1)(b: Int = 2)(c: Int = 3) = a + b + c

foo()()(3)   // 6
foo()(2)(3)  // 6
foo(2)()(3)  // 7
foo(3)()(3)  // 8