问题标签 [metaobject]

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 投票
0 回答
76 浏览

c - C 的元对象编译器

我需要为 C 编写一个元对象编译器(如 Qt 中的 MOC)。我将在 *.c 源代码中添加自己的关键字和机制(如 Qt 中的插槽/信号)。

我将分三个阶段介绍这项工作:

  1. 用自己的结构编写 C 代码
  2. 使用元对象编译器解析和生成没有自己构造的新源文件。
  3. 使用例如 GCC 从第 2 阶段编译文件。

所以,我对第二阶段有疑问。MOC 将是一个纯粹的 C 词法分析器/语法分析器,除了分析我的结构,对吗?免费访问中是否有这样的纯C分析器?是否真的要在他们中解析我的代码?一般来说,我认为方向是正确的?

0 投票
1 回答
237 浏览

groovy - Groovy 复制/组合来自多个对象的元方法

我有两节课。在运行时,我想将一个对象的方法“克隆”到另一个对象。这可能吗?我使用 leftshift 的失败尝试如下所示。

(注意:我也尝试了 currMethod.clone() ,结果相同。)

根据请求,我正在添加关于目标/用例的背景:

它非常类似于标准功能类型的用例。总之,我们有很多适用于我们所有客户端环境(50-100)的类的方法。我们将它们应用于以特定默认顺序处理数据。这些方法中的每一个都可以被客户端特定的方法覆盖(如果它们存在相同的方法名称),并且想法是使用上面的方法来“协调”方法集。根据客户端环境名称,我们需要一种动态覆盖方法的方法。

注意:在元类上覆盖方法是非常标准的(或者我应该说,这是存在惊人能力的原因)。如果我的方法以 String currMethod = "{x-> x+1}" 之类的文本形式存在,它就可以工作,那么我只说 this.metaClass."$currMethodName" = currMethod。在这种情况下,我的挑战是我的方法被编译并存在于另一个类中,而不是在某处被定义为文本。

在构建时在特定于客户端的类中编译所有自定义方法的目标是避免在运行时为每次计算编译这些动态方法的费用,因此所有特定于客户端的方法都编译成单独的特定于客户端的 JAR建造时间。这种方式还允许我们仅将特定于客户端的代码部署到相应的客户端,而无需在某个主类中进行所有其他客户端计算。

我希望这是有道理的。

新方法,响应 Jeremie B 的建议:

由于我需要在运行时选择要按名称实现的特征,所以这样的工作是否可行: