gpt4 book ai didi

斯卡拉 3 : Create Expr[ Int => Int ]

转载 作者:行者123 更新时间:2023-12-04 14:56:33 26 4
gpt4 key购买 nike

我在一个项目中使用 Scala3 宏,但我一直在创建函数的 Expr(和 ToExpr)。

我有这样的东西:

case class Foo(f : Int => Int)

given ToExpr[Foo] with {
def apply(foo : Foo) = foo match {
case Foo(f) => '{Foo(???)} // <-- here
}
}

我不知道如何用 Expr[Int => Int] 来替换上面的 ???


编辑:这是@GaelJ 的一些失败尝试

1)首先尝试

def apply(foo : Foo) = foo match {
case Foo(f) =>
val ff: Expr[Int => Int] = '{ (x: Int) => f.apply(x) }
'{Foo($ff)}
}

给予:

|        val ff: Expr[Int => Int] = '{ (x: Int) => f.apply(x) }
| ^
| access to value f from wrong staging level:
| - the definition is at level 0,
| - but the access is at level 1.

2) 第二次尝试

def apply(foo : Foo) = foo match {
case Foo(f) =>
val ff: Expr[Int => Int] = '{ (x: Int) => ($f).apply(x) }
'{Foo($ff)}
}

给予:

|        val ff: Expr[Int => Int] = '{ (x: Int) => ($f).apply(x) }
| ^
| Found: (f : Int => Int)
| Required: quoted.Expr[Any]

最佳答案

这里是给定的“构建 block ”来构造新的ToExpr:scala3 docs ToExpr .据我所知,不可能为函数构造 ToExpr

关于斯卡拉 3 : Create Expr[ Int => Int ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67870834/

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