加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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).由于它只是一个方法,_将它转换为一个函数.访问器不带任何参数,这就是为什么你有一个不带参数的函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读