问题标签 [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.
constructor - 使用 Clojure reify 提供构造函数
在 Clojure 中使用reify
时,如何为构造函数提供表达式?
或者,如何将参数传递给基类构造函数?
macros - 使用 clojure 宏在 reify 调用中自动创建 getter 和 setter
我正在尝试使用许多(约 50 个)getter 和 setter 方法(有些名称不规则)来实现一个巨大的 Java 接口。我认为使用宏来减少代码量会很好。所以而不是
我希望能够写作
这个设置和获取宏(或类似的东西)可能吗?我无法让它工作。
java - 使用 reify 创建的一次性实例导致 NPE
我正在尝试围绕 Java API 编写一个 Clojure 层,如下所示:
我的目标是创建一个 Clojure API,允许将 afn
作为execute
ExecutorJob 的方法体执行。这就是我想出的:
不幸的是,鉴于这个电话:
它会导致 NPE:
我尝试在execute-as
第二个参数中放入一些有意义的 Java 调用,我可以看到使用调试器执行得很好。
那个宏有什么问题?
macros - 动态 let 形式作为宏内 reify 的一部分
好的,让我们试着弄清楚这一点:我的最终目的是为用户提供一个宏作为 API,它看起来像:
结果必须是Script
协议的一个实例,如下所示:
这个想法是第一个参数defscript
是需要绑定到对应键的符号列表model
:
我想不出任何可以有效产生这种效果的代码,因为我在尝试使用参数时经常碰壁model
,因为在宏扩展时它只是一个符号:
invoke-
如果直接调用可以正常工作:
defscript
但在asmodel
无法正确展开时,它不起作用:
我怎样才能越过这一点并将各个部分粘合在一起?
haskell - 获取 Haskell 记录的字段名称作为字符串列表?
说我有以下内容:
我了解 Template Haskell 并且该reify
功能可以让我获得记录的字段名称。那是:
还有一种说法是这可以在没有模板 Haskell 的情况下完成。有人可以为此提供一个示例实现吗?
scala - reify宏扩展期间的StackOverflowError
我有一个使用 reify 的简单测试宏。它会在宏扩展期间导致 StackOverflowError。
为什么会这样?可以以某种方式避免吗?
编辑:这就是 M6 发生的事情。我刚刚用 M7 试了一下,现在它说
实现限制:无法具体化类型 Object{def (): O.type} (ClassInfoType)
所以这回答了为什么的问题,但问题仍然是是否有办法解决这个问题。
scala - 使用 def-macros 捕获源代码
(对于 TL;DR,请转到粗体部分)
我有一个带有序列化的干净封闭类型类系统(与 POJO 序列化问题分离)。例如:
但在某些情况下,我需要捕获一个闭包。例如:
现在,我用 POJO 序列化(ObjectOutputStream
等)解决了这个问题fun
。我的脚被严重咬伤,因为我无法在 Scala 2.10 中阅读我在 2.9 中序列化的内容。在这种情况下,我真的需要确保我可以独立于 Scala 版本来取回我的东西。
所以......我一直在想我可以使用宏来“备份”源代码,这样如果 POJO 反序列化失败,我可以从源代码重新生成函数(使用就地编译器/解释器)。
我的想法是
是否可以轻松捕获呼叫的来源,例如
(我的猜测是 def-macro 需要已经在 的map
函数中ExprOps
)。
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中修复”)。
haskell - 有没有办法使用 Template Haskell 枚举模块中的所有函数?
虽然我可以reify
用来获取有关大多数其他句法结构的信息,但我找不到任何可以提供有关模块的信息的东西。