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



正如我们所知,我们可以在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自己的评论基本上说这太复杂了。

然而,有几种作弊方法。

如果您对函数参数使用类型推断,即如果您在静态已知参数为varargs参数的上下文中使用函数文字,那么一切都很好:

val func: (String*) => Unit = s => println(s)

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

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)

相关内容

  • 没有找到相关文章

最新更新