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