问题标签 [reify]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1645 浏览

constructor - 使用 Clojure reify 提供构造函数

在 Clojure 中使用reify时,如何为构造函数提供表达式?

或者,如何将参数传递给基类构造函数?

0 投票
4 回答
1295 浏览

macros - 使用 clojure 宏在 reify 调用中自动创建 getter 和 setter

我正在尝试使用许多(约 50 个)getter 和 setter 方法(有些名称不规则)来实现一个巨大的 Java 接口。我认为使用宏来减少代码量会很好。所以而不是

我希望能够写作

这个设置和获取宏(或类似的东西)可能吗?我无法让它工作。

0 投票
1 回答
146 浏览

java - 使用 reify 创建的一次性实例导致 NPE

我正在尝试围绕 Java API 编写一个 Clojure 层,如下所示:

我的目标是创建一个 Clojure API,允许将 afn作为executeExecutorJob 的方法体执行。这就是我想出的:

不幸的是,鉴于这个电话:

它会导致 NPE:

我尝试在execute-as第二个参数中放入一些有意义的 Java 调用,我可以看到使用调试器执行得很好。

那个宏有什么问题?

0 投票
1 回答
200 浏览

macros - 动态 let 形式作为宏内 reify 的一部分

好的,让我们试着弄清楚这一点:我的最终目的是为用户提供一个宏作为 API,它看起来像:

结果必须是Script协议的一个实例,如下所示:

这个想法是第一个参数defscript是需要绑定到对应键的符号列表model

我想不出任何可以有效产生这种效果的代码,因为我在尝试使用参数时经常碰壁model,因为在宏扩展时它只是一个符号:

invoke-如果直接调用可以正常工作:

defscript但在asmodel无法正确展开时,它不起作用:

我怎样才能越过这一点并将各个部分粘合在一起?

0 投票
1 回答
2437 浏览

haskell - 获取 Haskell 记录的字段名称作为字符串列表?

说我有以下内容:

我了解 Template Haskell 并且该reify功能可以让我获得记录的字段名称。那是:

还有一种说法是这可以在没有模板 Haskell 的情况下完成。有人可以为此提供一个示例实现吗?

0 投票
2 回答
149 浏览

scala - reify宏扩展期间的StackOverflowError

我有一个使用 reify 的简单测试宏。它会在宏扩展期间导致 StackOverflowError。

为什么会这样?可以以某种方式避免吗?

编辑:这就是 M6 发生的事情。我刚刚用 M7 试了一下,现在它说

实现限制:无法具体化类型 Object{def (): O.type} (ClassInfoType)

所以这回答了为什么的问题,但问题仍然是是否有办法解决这个问题。

0 投票
1 回答
265 浏览

scala - 使用 def-macros 捕获源代码

(对于 TL;DR,请转到粗体部分)

我有一个带有序列化的干净封闭类型类系统(与 POJO 序列化问题分离)。例如:

但在某些情况下,我需要捕获一个闭包。例如:

现在,我用 POJO 序列化(ObjectOutputStream等)解决了这个问题fun。我的脚被严重咬伤,因为我无法在 Scala 2.10 中阅读我在 2.9 中序列化的内容。在这种情况下,我真的需要确保我可以独立于 Scala 版本来取回我的东西。

所以......我一直在想我可以使用宏来“备份”源代码,这样如果 POJO 反序列化失败,我可以从源代码重新生成函数(使用就地编译器/解释器)。

我的想法是

是否可以轻松捕获呼叫的来源,例如

(我的猜测是 def-macro 需要已经在 的map函数中ExprOps)。

0 投票
1 回答
5876 浏览

haskell - 使用模板 Haskell 获取关联的类型同义词

模板 Haskell 可以找出类型类中声明的关联类型同义词的名称和/或声明吗?我希望reify会做我想做的事,但它似乎并没有提供所有必要的信息。它适用于获取函数类型签名:

但是,向类添加关联的类型同义词不会导致输出中的任何更改(直到重命名):

如果我知道 的名称F,我可以查找有关它的信息:

但我一开始就找不到名字F。即使我添加了类型类的实例,InstanceD也没有关于定义的信息:

如果reify不起作用,除了手动列出关联类型同义词之外,是否有解决方法?

这个问题存在于 GHC 7.8.3 和 2.9.0.0 版本的 template-haskell 包中;它也存在于 GHC 7.4.2 中,带有 template-haskell 包的 2.7.0.0 版本。(我没有检查 GHC 7.6.*,但我想它也存在。)我对任何版本的 GHC 的解决方案感兴趣(包括“这仅在 GHC 版本V中修复”)。

0 投票
1 回答
315 浏览

haskell - 如何使用`reify`获取函数的声明?

函数reify允许我查找有关给定名称的信息。对于函数,返回值为VarI

在这里我可以检查函数的类型,并且我还想检查它的声明。但是,在VarI我总是看到的第三个参数中Nothing。有没有办法获得函数的声明?

0 投票
1 回答
339 浏览

haskell - 有没有办法使用 Template Haskell 枚举模块中的所有函数?

虽然我可以reify用来获取有关大多数其他句法结构的信息,但我找不到任何可以提供有关模块的信息的东西。