Scala 函数应用和类型关联

Scala 函数应用和类型关联,scala,Scala,在Scala中,函数应用程序关联到左侧,而函数类型关联到右侧(Scala课程第二周)。我不明白。有人能解释一下吗 “函数应用程序”和“函数类型”之间的具体区别是什么?通常,关联性(左或右)是某些符号(运算符)的预定义属性,它告诉我们如何在一个链中多次读取使用此符号的表达式 例如,Scala中的函数应用程序是一个类似于fun(param1,…)的表达式。它可以被链接,例如:fun(a,b)((g,h)。它是左关联的这一事实意味着这样一个表达式等价于((fun(a,b))())(c,d),也就是说(

在Scala中,函数应用程序关联到左侧,而函数类型关联到右侧(Scala课程第二周)。我不明白。有人能解释一下吗

“函数应用程序”和“函数类型”之间的具体区别是什么?

通常,关联性(左或右)是某些符号(运算符)的预定义属性,它告诉我们如何在一个链中多次读取使用此符号的表达式

例如,Scala中的函数应用程序是一个类似于
fun(param1,…)
的表达式。它可以被链接,例如:
fun(a,b)((g,h)
。它是左关联的这一事实意味着这样一个表达式等价于
((fun(a,b))())(c,d)
,也就是说(在伪代码中):

Scala中的函数类型是函数对象的一种类型。Scala有其特定的符号来表示这些类型。此符号使用
=>
运算符。例如,
String=>Int
是一种函数类型,它将
String
作为参数并返回
Int

现在,问题来了,什么是
String=>Int=>Float
?它是一个将
String
Int
的函数作为参数并返回
Float
的函数吗?或者,它可能是一个函数,它接受
String
,并将函数从
Int
返回到
Float

换句话说,我们应该把
String=>Int=>Float
读作
(String=>Int)=>Float
还是
String=>(Int=>Float)
?如果
=>
操作符是左关联的,那么它将是
(String=>Int)=>Float
。如果它是正确的关联,那么它将是
String=>(Int=>Float)

我们知道,
=>
是右关联的,这意味着
String=>Int=>Float
相当于
String=>(Int=>Float)
,它表示一个函数的类型,该函数接受
String
并返回另一个函数,该函数接受
Int
并返回
Float

( ( fun applied to arguments a and b ) applied to no arguments ) applied to arguments c and d