这个函数签名是什么意思?

时间:2017-05-02 03:27:34

标签: scala

我遇到了这个功能签名

def foldMapP[A, B : Monoid](values: Iterable[A])(func: A => B = (a: A) => a): Future[B] = ???

所以这声明了一个函数,它接受A并返回一个B,然后是B之后的=是什么?

3 个答案:

答案 0 :(得分:2)

funcA => B类型,但其默认值为"只需返回A部分"。因此,您可以在没有参数的情况下调用foo,它将使用默认函数。

答案 1 :(得分:1)

正如其他人所写的那样,语法是针对默认参数值的,但是我想指出一个关于它的类型的有趣的事情。 因此该函数采用从A到B的函数,并且 - 如果没有提供它,则默认为A中的基本身份函数。

那么A =>类型的参数怎么样? B的默认值类型为A =>一个?

看起来很奇怪,但这会编译。然而,在没有传递参数的情况下调用它只会在类型参数A和B明确声明或推断为相同类型时进行编译。

所以foo [String,Int]不应该,而foo [Int,Int]应该编译,如果我没有弄错的话。我不确定如果没有明确的类型参数会对foo产生什么影响,但是,可能是一个不太有用的[Nothing,Nothing]推断?

答案 2 :(得分:0)

这称为带有默认值的可选参数。基本上,

def foo(x: Int = 42) = ???

表示:x的类型为Int,如果来电者未传递参数,请改用42

E.g:

def foo(x: Int = 42) = x

foo(23) //=> 23
foo()   //=> 42

而不是:

def bar(x: Int) = x

bar(23) //=> 23
bar()   //ERROR