使用可选参数给出以下函数:
def foo(a:Int = 1, b:Int = 2, c:Int = 3) ...
我想保留 a 的默认值,但只能通过位置分配(而不是通过位置分配)将新值传递给 b 和 c 命名赋值),这是以下任何一种语法都很好:
foo( , 5, 7)
foo(_, 5, 7)
Scala可以做到这一点吗?
答案 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