假设我有两种方法
scala> def a(a: Int, b: Int, c: Int) : Int = …
a: (a: Int, b: Int, c: Int)Int
scala> def b(i: Int) : Int = …
b: (i: Int)Int
Run Code Online (Sandbox Code Playgroud)
如何定义一个方法c
,即两者的组合?不幸的是,以下代码无法编译:
def c = b(a)
Run Code Online (Sandbox Code Playgroud)
sen*_*nia 10
您可以将方法转换a
为函数,然后使用如下方法andThen
:
def a(a: Int, b: Int, c: Int) : Int = a + b + c
def b(i: Int) : Int = i * 2
val c = (a _).tupled andThen b
c(1, 1, 1)
// 6
Run Code Online (Sandbox Code Playgroud)
请注意,我必须将函数转换(Int, Int, Int) => Int
为tupled版本((Int, Int, Int)) => Int
- 这里使用andThen
.所以结果函数c
接受Tuple3
为参数.
您可以使用以下命令转换c
为untupled version((Int, Int, Int) => Int
)Function.untupled
:
val untupledC = Function.untupled(c)
untupledC(1, 1, 1)
// 6
Run Code Online (Sandbox Code Playgroud)
untupled
函数arity> 5 没有方法.
你也可以使用/ 方法对任何这样的arity:shapeless
toProduct
fromProduct
import shapeless.ops.function._
import shapeless.ops.function._
val c = (a _).toProduct.andThen(b).fromProduct
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
331 次 |
最近记录: |