Может быть, кто-то может помочь мне с бесформенным? Я новичок в этом.
Моя конкретная задача - создать функцию, которая преобразует данный элемент кортежа в Option. Например:
val inp: (String, Int) = ("zzz", 5)
myfunc(inp, 1)
должен вернуть: ("zzz", Option(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()))
}
Так что я могу назвать это как opt(t, 1, ()=> t.at(1))
, но я бы очень хотел не использовать 3-й параметр
Итак, моя проблема в следующем:
Я не могу совместить at()
вывод и replaceAt()
ввод.
IDE предлагает мне использовать At[P, n.N]#Out
в качестве at()
вывода, но это не совпадает с U
вводом replaceAt