在 Scala 中,函数应用程序关联到左侧,而函数类型关联到右侧(Scala 课程第二周)。我不明白这个。谁能解释一下?
“功能应用”和“功能类型”到底有什么区别?
一般来说,关联性(左或右)是某个符号(运算符)的预定义属性,它告诉我们应该如何读取在链中多次使用该符号的表达式。
例如,Scala 中的函数应用程序是一个表达式,如fun(param1, ...)
. 它可以被链接,例如:fun(a,b)()(g,h)
. 并且它是左关联的事实意味着这样的表达式等价于((fun(a,b))())(c,d)
,即(在伪代码中):
( ( fun applied to arguments a and b ) applied to no arguments ) applied to arguments c and d
Scala 中的函数类型是函数对象的一种类型。Scala 有其特定的符号来表示此类类型。此表示法使用=>
运算符。例如String => Int
,一种String
以参数为参数并返回的函数Int
。
现在,问题出现了,什么是String => Int => Float
?String
它是一个将函数作为参数的函数Int
吗Float
?或者也许它是一个从to获取String
并返回一个函数的函数?Int
Float
换句话说,我们应该读String => Int => Float
作(String => Int) => Float
orString => (Int => Float)
吗?如果=>
运算符是左结合的,那么它将是(String => Int) => Float
. 如果它是右结合的,它将是String => (Int => Float)
。
正如我们所知,=>
是右关联的,这意味着它String => Int => Float
等价于String => (Int => Float)
并且它表示一个函数的类型,该函数接受String
并返回另一个函数,该函数接受Int
并返回Float
。