是否可以通过scala中的函数文字编写重复参数函数?

爱国者*_*爱国者 3 scala multiparameter

我们知道我们可以在scala中定义一个重复参数(varargs)函数,如下所示:

def func(s: String*) = println(s)
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在函数文字样式中重写上述内容.或者这样做不可能吗?

注意:(s: String) => println(s)不正确.

Jör*_*tag 9

我们知道我们可以在scala中定义一个多参数函数,如下所示:

def func(s: String*) = println(s)
Run Code Online (Sandbox Code Playgroud)

实际上,这不是一个功能,这是一种方法.这两者在Scala中根本不同.

我的问题是如何在函数文字样式中重写上述内容.或者这样做不可能吗?

注意:(s: String*) => println(s)不正确.

您无法在函数文字中定义varargs参数.在Scala bug跟踪器中有一个关于这个的错误报告以及Martin Odersky自己的评论基本上说这会太复杂了.

但是,有几种方法可以作弊.

如果您使用的类型推断函数的参数,如果你使用的功能在参数静态称为是一个可变参数的参数上下文字面IE,然后一切工作正常:

val func: (String*) => Unit = s => println(s)
Run Code Online (Sandbox Code Playgroud)

或者,您可以定义一个方法,然后通过η-expansion将其转换为部分应用的函数:

def meth(s: String*) = println(s)

val func = meth _
Run Code Online (Sandbox Code Playgroud)