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

部分应用的函数,Scala中缺少所有参数

发布时间:2020-12-16 18:22:23 所属栏目:安全 来源:网络整理
导读:根据我的理解,部分应用的函数是函数,我们可以在没有函数的情况下调用它们 传递所有/一些必需的参数. def add(x:Int,y:Int) = x + yval paf = add(_ :Int,3)val paf1 = add(_ :Int,_ :Int) 在上面的例子中,paf1引用部分应用的函数,缺少所有参数,我可以调用使
根据我的理解,部分应用的函数是函数,我们可以在没有函数的情况下调用它们
传递所有/一些必需的参数.

def add(x:Int,y:Int) = x + y
val paf = add(_ :Int,3)
val paf1 = add(_ :Int,_ :Int)

在上面的例子中,paf1引用部分应用的函数,缺少所有参数,我可以调用使用:paf1(10,20),并且可以使用add(10,20)调用原始函数

我的问题是,创建一个缺少所有参数的部分应用函数的额外好处是什么,因为调用语法几乎相同?它只是将方法转换为一级函数吗?

解决方法

Scala的def关键字是如何定义方法和方法不是函数(在Scala中).因此,你的add不像paf1那样是一流的函数实体,即使它们在生成结果时在语义上与它们的参数相同.

Scala会自动使用部分应用程序将方法转换为等效函数,您可以通过扩展示例来看到:

def add(x: Int,y: Int) = x + y
...
val pa2: (Int,Int) => Int = add
pa2: (Int,Int) => Int = <function2>

在这个例子中,这似乎没什么好处,但是在很多情况下,存在非显式约束,表明需要一个函数(或者更确切地说,在其他地方明确指定约束),这些约束允许您简单地给出一个(类型兼容的)方法名称.你需要一个功能的地方.

(编辑:李大同)

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

    推荐文章
      热点阅读