繁体   English   中英

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

[英]andThen for function of two arguments in Scala

假设我有两个函数fg

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)

为什么不编译,如何编写fg来获取(Int, Int) => String

它不会编译,因为andThenFunction1一个方法(一个参数的函数:参见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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM