gpt4 book ai didi

scala - 如何组合方法,没有重复的输入参数

转载 作者:行者123 更新时间:2023-12-04 10:00:31 25 4
gpt4 key购买 nike

假设我有两种方法

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

如何定义方法 c ,那是两者的组成?
不幸的是,以下代码无法编译:
def c = b(a)

最佳答案

您可以转换方法 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

请注意,我必须转换函数 (Int, Int, Int) => Int到元组版本 - ((Int, Int, Int)) => Int - 在这里使用 andThen .所以结果函数 c接受 Tuple3作为论据。

您可以转换 c使用 (Int, Int, Int) => Int 到非元组版本( Function.untupled ) :
val untupledC = Function.untupled(c)

untupledC(1, 1, 1)
// 6

无形的

没有 untupled函数 arity > 5 的方法。

您也可以使用 shapeless toProduct/ fromProduct任何像这样的arity的方法:
import shapeless.ops.function._
import shapeless.ops.function._

val c = (a _).toProduct.andThen(b).fromProduct

关于scala - 如何组合方法,没有重复的输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com