我正在学习一些函数式编程语言,学习感兴趣的东西,现在我正在研究Scala。我想要做的是弄清楚编写一个名为double
的函数的最简单方法,该函数接受一个参数并将其加倍。到目前为止我想出的是:
def double = (x:Int) => x*2
或
def double(x:Int) = x*2
这有效,但我正在寻找最简单的方式。在Haskell中,我可以简单地这样做:
double = (*2)
因为它是部分应用的函数,所以不需要命名变量或指定任何类型(我确定*
函数会处理它)。使用Scala有类似的方法吗?我尝过了一些,特别是使用_
代替x
,但似乎都没有。
答案 0 :(得分:8)
这个怎么样:
val double = (_: Int) * 2
注意此处double
是Function
而不是method
。在第一个示例中,您定义了名为method
的{{1}},其返回类型为double
。在您的第二个示例中,您刚刚定义了Function
。
method
与Scala中的Function
不同。
如果编译器可以获取类型信息,我们可以编写method
甚至简单:
Function
答案 1 :(得分:1)
编写它的最短路径是
*2