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))