scala – 为什么应用于2个函数的部分函数以2种不同的方式执行相
发布时间:2020-12-16 19:17:38 所属栏目:安全 来源:网络整理
导读:我可以定义以下两个函数: def add(a: Int,b: Int,c: Int) = a + b + c 这导致了 add: (a: Int,c: Int)Int 和 val add2 = (a: Int,c: Int) = a + b + c 这导致了 add2: (Int,Int,Int) = Int = function3 这两个函数完全相同,但以不同的方式定义,我不明白的是
我可以定义以下两个函数:
def add(a: Int,b: Int,c: Int) = a + b + c 这导致了 add: (a: Int,c: Int)Int 和 val add2 = (a: Int,c: Int) => a + b + c 这导致了 add2: (Int,Int,Int) => Int = <function3> 这两个函数完全相同,但以不同的方式定义,我不明白的是,如果我继续并定义部分应用函数,如下所示: def a = add _ 这导致了 a: (Int,Int) => Int = <function3> 正如预期的那样,一个函数接受3个参数并返回一个Int,但是如果我这样做的话 def a2 = add2 _ 这导致了 a2: () => (Int,Int) => Int = <function0> 这似乎是一个不带参数的函数,并返回一个接受3个Int参数并返回Int的函数.为什么会这样?有人可以解释一下发生了什么吗? 谢谢 解决方法
这是Scala的一个奇怪的副作用,实际上没有(用户可访问的)字段,而是拥有所有内容的访问器(getter).注意:
scala> val i = 1 i: Int = 1 scala> i _ res0: () => Int = <function0> 原因是我实际上是一个底层(隐藏,不可访问)字段的访问器(def i:Int).由于它只是一个方法,_将它转换为一个函数.访问器不带任何参数,这就是为什么你有一个不带参数的函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |