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

Scala 这个函数签名是什么意思?,scala,Scala,我遇到了这个函数签名 def foldMapP[A, B : Monoid](values: Iterable[A])(func: A => B = (a: A) => a): Future[B] = ??? 因此,这声明了一个函数,它接受和a并返回a B,然后在B之后是什么?func是类型a=>B,但它有一个默认值“只返回a部分”。因此,您可以在不带参数的情况下调用foo,它将使用默认函数。func的类型是A=>B,但它的默认值为“只返回A部分”。因此,您可以在不带参数的情况下调

我遇到了这个函数签名

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

因此,这声明了一个函数,它接受和a并返回a B,然后在B之后是什么?

func
是类型
a=>B
,但它有一个默认值“只返回
a
部分”。因此,您可以在不带参数的情况下调用
foo
,它将使用默认函数。

func
的类型是
A=>B
,但它的默认值为“只返回
A
部分”。因此,您可以在不带参数的情况下调用
foo
,它将使用默认函数。

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

def foo(x: Int = 42) = ???
意思是:
x
属于
Int
类型,如果调用者没有传递参数,则使用
42

例如:

与之相反:

def bar(x: Int) = x

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

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

def foo(x: Int = 42) = ???
意思是:
x
属于
Int
类型,如果调用者没有传递参数,则使用
42

例如:

与之相反:

def bar(x: Int) = x

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

正如其他人所写的,语法是针对默认参数值的,但我想指出关于其类型的一件有趣的事情。 因此,函数从a到B取一个函数,如果没有提供,它将默认为a中的基本标识函数

那么,a=>B类型的参数怎么会有a=>a类型的默认值呢

虽然看起来很奇怪,但这是可以编译的。但是,在没有传递参数的情况下调用它,仅当类型参数a和B被显式声明或推断为同一类型时,才会编译


所以foo[String,Int]不应该编译,而如果我没有弄错的话,foo[Int,Int]应该编译。我不确定没有显式类型参数的foo会发生什么,但是,可能推断出的[Nothing,Nothing]不是很有帮助?

正如其他人所写的,语法是默认参数值,但我想指出关于它的类型的一件有趣的事情。 因此,函数从a到B取一个函数,如果没有提供,它将默认为a中的基本标识函数

那么,a=>B类型的参数怎么会有a=>a类型的默认值呢

虽然看起来很奇怪,但这是可以编译的。但是,在没有传递参数的情况下调用它,仅当类型参数a和B被显式声明或推断为同一类型时,才会编译


所以foo[String,Int]不应该编译,而如果我没有弄错的话,foo[Int,Int]应该编译。如果没有显式类型参数,我不确定foo会发生什么,但是,可能推断出的[Nothing,Nothing]不是很有用?

很有趣<代码>函数:A=>B=(A:A)=>A似乎是默认函数,如果您没有指定从A到B的特定函数,它将映射到作为输入的任何对象。我猜。很有趣<代码>函数:A=>B=(A:A)=>A似乎是默认函数,如果您没有指定从A到B的特定函数,它将映射到给定的任何输入。我猜。
A
B
不需要不同。你说得对,如果调用
foo[Int,Char]()
它将不会编译,但是如果编译器推断出
A
B
,那么
foo()
应该编译并运行。我们不需要至少一个视图绑定
A我刚才检查过了。。。我们实际上不需要视图绑定。。。。Scala允许此默认函数参数。。。但是为什么或者怎样才能为类型为
a=>B
的参数传递函数
(a:a)=>a
,而a和B之间没有界限?好的。。。我现在明白了。我想得太多了,以至于没有注意到这件简单的事情。
A
B
不一定是不同的。你说得对,如果调用
foo[Int,Char]()
它将不会编译,但是如果编译器推断出
A
B
,那么
foo()
应该编译并运行。我们不需要至少一个视图绑定
A我刚才检查过了。。。我们实际上不需要视图绑定。。。。Scala允许此默认函数参数。。。但是为什么或者怎样才能为类型为
a=>B
的参数传递函数
(a:a)=>a
,而a和B之间没有界限?好的。。。我现在明白了。我想得太多了,没注意到这件简单的事。是的,这件事仍然让我困惑。当函数签名为
B
时,如何返回默认的
a
。是的,这件事仍然困扰着我。当函数签名为
B
时,如何返回默认值
a