Scala 如何以最简单的方式组合2个无形状函数(replaceAt和at)?
也许有人能帮我解决这个问题?我是新手 我的具体任务是创建将给定元组元素转换为选项的函数 例如:Scala 如何以最简单的方式组合2个无形状函数(replaceAt和at)?,scala,shapeless,Scala,Shapeless,也许有人能帮我解决这个问题?我是新手 我的具体任务是创建将给定元组元素转换为选项的函数 例如: val inp: (String, Int) = ("zzz", 5) myfunc(inp, 1) 应返回:zzz,选项5 我发现我可以用replaceAt和at函数完成这些任务,但我不知道如何在一个通用函数中完成这些任务。 我最好的结果是: def opt[P <: Product, U, V, R](p: P, n: Nat, u: ()=>U)(implicit at: At[P
val inp: (String, Int) = ("zzz", 5)
myfunc(inp, 1)
应返回:zzz,选项5
我发现我可以用replaceAt和at函数完成这些任务,但我不知道如何在一个通用函数中完成这些任务。
我最好的结果是:
def opt[P <: Product, U, V, R](p: P, n: Nat, u: ()=>U)(implicit at: At[P, n.N], replacer: ReplaceAt.Aux[P, n.N, Option[U], (V, R)]):R = {
val value1: TupleOps[P] = shapeless.syntax.std.tuple.productTupleOps(p)
val out1 = value1.at(n)
value1.updatedAt(n, Option(u()))
}
所以我可以像optt,1,=>t.at1一样调用它,但我非常不想使用第三个参数
因此,总体而言,我的问题是:
我不能在输出端和输入端合并
IDE提供我在[p,n.n]输出时使用At作为At输出,但这与replaceAt的U输入不匹配
非常感谢。这似乎是我所需要的。我在ModifierRat上遇到了麻烦,但我使用了UpdateAt,并使用了它。现在一切都正常运转了:
import shapeless.Nat
import shapeless.ops.tuple.{At, ModifierAt}
def myfunc[P <: Product, N <: Nat, T, P1 <: Product](p: P, n: N)(implicit
at: At.Aux[P, N, T],
modifier: ModifierAt.Aux[P, N, T, Option[T], (T, P1)]): P1 =
modifier(p, Some(_))._2
myfunc(inp, 1) //("zzz",Some(5))