在Scala中,函数应用程序关联到左侧,而函数类型关联到右侧(scala课程第二周)。我不懂。谁能解释一下?
“功能应用”和“功能类型”之间究竟有什么区别?
答案 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
是什么?它是一个函数,它将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
的函数。