功能应用和类型关联

时间:2013-04-03 21:08:24

标签: scala

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

“功能应用”和“功能类型”之间究竟有什么区别?

1 个答案:

答案 0 :(得分:9)

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

例如,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是什么?它是一个函数,它将StringInt的函数作为参数,并返回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的函数。

相关问题