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

然后是Scala中两个参数的功能

发布时间:2020-12-16 18:45:36 所属栏目:安全 来源:网络整理
导读:假设我有两个函数f和g: val f: (Int,Int) = Int = _ + _val g: Int = String = _ + "" 现在我想用它们来组合它们然后得到一个函数h val h: (Int,Int) = String = f andThen g 不幸的是它没有编译:( scala val h = (f andThen g)console error: value andThe
假设我有两个函数f和g:

val f: (Int,Int) => Int = _ + _
val g: Int => String = _ +  ""

现在我想用它们来组合它们然后得到一个函数h

val h: (Int,Int) => String = f andThen g

不幸的是它没有编译:(

scala> val h = (f andThen g)
<console> error: value andThen is not a member of (Int,Int) => Int
   val h = (f andThen g)

为什么不编译,如何编写f和g来获取(Int,Int)=>字符串?

解决方法

它不能编译,因为而且它是Function1的一个方法(一个参数的函数:参见 scaladoc).

函数f有两个参数,因此是Function2的一个实例(参见scaladoc).

要使其编译,您需要通过tupling将f转换为一个参数的函数:

scala> val h = f.tupled andThen g
h: (Int,Int) => String = <function1>

测试:

scala> val t = (1,1)
scala> h(t)
res1: String = 2

您也可以更简单地将调用写入h,因为auto-tupling没有明确创建元组(尽管由于混淆和类型安全性丢失,自动编组有点争议):

scala> h(1,1)
res1: String = 2

(编辑:李大同)

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

    推荐文章
      热点阅读