我遇到了这个功能签名
def foldMapP[A, B : Monoid](values: Iterable[A])(func: A => B = (a: A) => a): Future[B] = ???
所以这声明了一个函数,它接受A并返回一个B,然后是B之后的=
是什么?
答案 0 :(得分:2)
func
是A => 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