5

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

“功能应用”和“功能类型”到底有什么区别?

4

1 回答 1

10

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

例如,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 => FloatString它是一个将函数作为参数的函数IntFloat?或者也许它是一个从to获取String并返回一个函数的函数?IntFloat

换句话说,我们应该读String => Int => Float(String => Int) => FloatorString => (Int => Float)吗?如果=>运算符是左结合的,那么它将是(String => Int) => Float. 如果它是右结合的,它将是String => (Int => Float)

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

于 2013-04-03T21:53:49.770 回答