正如我们所知,我们可以在 scala 中定义一个重复参数(varargs)函数,如下所示:
def func(s: String*) = println(s)
我的问题是如何以函数文字样式重写上述内容。还是不可能做到这一点?
注:(s: String) => println(s)
不正确。
正如我们所知,我们可以在 scala 中定义一个重复参数(varargs)函数,如下所示:
def func(s: String*) = println(s)
我的问题是如何以函数文字样式重写上述内容。还是不可能做到这一点?
注:(s: String) => println(s)
不正确。
众所周知,我们可以在 scala 中定义一个多参数函数,如下所示:
def func(s: String*) = println(s)
实际上,这不是函数,而是方法。两者在 Scala 中是根本不同的。
我的问题是如何以函数文字样式重写上述内容。还是不可能做到这一点?
注意:
(s: String*) => println(s)
不正确。
您不能在函数文字中定义 varargs 参数。在 Scala 错误跟踪器中有一个关于此的错误报告和 Martin Odersky 本人的评论,基本上说这太复杂了。
然而,有几种作弊方法。
如果您对函数参数使用类型推断,即如果您在参数静态已知为可变参数的上下文中使用函数文字,那么一切正常:
val func: (String*) => Unit = s => println(s)
或者,您可以定义一个方法,然后通过 η-expansion 将其转换为部分应用的函数:
def meth(s: String*) = println(s)
val func = meth _
正如评论中所写。您可以通过首先定义一个方法然后使用“指向”该方法的函数来作弊:
> def m(str:String*) = println(str)
m: (str: String*)Unit
> val f = m _
f: String* => Unit = <function1>
> f("1", "2")
WrappedArray(1, 2)