[英]andThen for function of two arguments in Scala
假设我有两个函数f
和g
:
val f: (Int, Int) => Int = _ + _
val g: Int => String = _ + ""
现在我想用它们来组合它们andThen
得到一个函数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) => String
?
它不会编译,因为andThen
是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
因为它没有明确地创建元组(尽管自动元组因为混淆和类型安全性丢失而引起争议):
scala> h(1,1)
res1: String = 2
Function2
没有andThen
方法。
但是,您可以手动编写它们:
val h: (Int, Int) => String = { (x, y) => g(f(x,y)) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.