问题标签 [mop]

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 回答
155 浏览

java - Groovy 按引用返回的难题

我正在用 Groovy 编写 DSL 来破解 BASIC 脚本。我正在考虑如何处理 BASIC 数组。

使用 MOP 来处理类似的事情似乎很容易:

当 A 为 DIMed 时,我将动态声明 A 闭包,并且此 A 闭包将根据其参数返回一个值。但处理起来并不那么简单:

因为我不能从 Groovy 引用返回。除了解析 A(5) 是左值还是右值之外,有人能想到解决办法吗?

0 投票
2 回答
1708 浏览

java - 将超过二维的java数组视为列表

我正在使用 Groovy 编写一个处理 BASIC 的 DSL,我想要一些关于如何处理多(多于 2 个)维数组的帮助。

我正在处理这样的基本代码:

处理 1 维情况很容易 - 只需创建一个返回 A 元素的闭包(通过 MOP),而对于 2 维,我可以在表单中执行相同操作

但是如何处理无限维度的数组呢?

更新:为了更清楚一点,问题是如何在 DSL 上下文中动态返回数组值?脚本解释器将 A(1, 2, 3) 视为我可以使用 MOP 拦截的函数调用。但是如何在该上下文中返回数组元素的值?

0 投票
2 回答
1239 浏览

eclipse - Groovy - com 的类节点中的意外 MOP 方法

不知道这是从何而来。使用groovy eclipse插件v2.61,groovy编译器1.8.6,eclipse 3.7

我可以在此处包含一些代码,但错误是在注释标题的中间生成的

尝试过清理项目、重建项目和相关技巧

问题:什么是 MOP,有没有办法禁用它?

弗朗西斯

PS。切换到 groovy 编译器 1.7 会使错误消失,但这几乎不是解决方案(IMO)

0 投票
2 回答
287 浏览

perl - 解释这个巫术!!!(在 Perl 中,使用 Moose 和 namespace::autoclean)

所以这些天我正在处理一个使用 Perl 和 Moose 的项目。我了解 Moose 是建立在 MOP 之上的。我对MOP不是太熟悉,也遇到过不明白的,可以用理论上的解释。这是模块namespace::autoclean的文档:

所以,在我使用 Moose 之前,您在对象上调用方法的方式是:Perl 解释器会在您的对象被祝福到的包的符号表中查找该方法(然后,如果没有找到,请考虑@ISA继承等)。它从包中调用导入函数的方式是:它在包的符号表中查找函数的名称。据我所知,无论哪种方式,这意味着相同的符号表,所以这种行为应该是不可能的。

我对源头的初步检查没有成效。从广义上讲,当使用 Moose、MOP 和 namespace::autoclean 时,这种诡计变得可能有什么不同?

编。要特别清楚,如果我要替换use namespace::autoclean

那么Foo->bar;文档中描述的调用会崩溃,因为Foo->bar不知道在哪里可以找到imported_function.

0 投票
1 回答
634 浏览

lisp - 类终结:如何避免创建虚拟实例?

我遇到了一个问题,第三方库需要对一个类进行操作,就好像它已经完成一样。经过一番阅读,我了解了这种机制背后的动机,但我真的不知道它是如何运作的。

例子:

除非我添加第一行,否则该函数将无法编译,给我这个错误:

optima是一个模式匹配库,(expression :op op ...)它将类的实例expression与给定的模式匹配。我不知道很多细节,但看起来它需要知道为这个类定义的访问器是什么,而且看起来这些信息在最终确定之前是不可用的。那么,有没有办法回避最终确定的问题呢?

该课程不会被扩展(至少不会在这个项目中,也没有计划)。创建一个虚拟实例并没有那么大的伤害......这只是一个丑陋的解决方案,所以我希望找到一个更好的解决方案。另外,也许,我会得到更多关于定稿的信息,这也很好:)

0 投票
1 回答
208 浏览

common-lisp - 专注于向量和矩阵

我正在使用 common-lisp 进行实时图形实验,到目前为止它非常棒。我对速度和与 cffi 轻松兼容的要求意味着我使用的是“类型化”数组。代码中真正难看的一个区域是我的矩阵和向量数学函数的通用版本。由于 CLOS 不能专注于数组的长度,我正在做这样的事情:

这有效,但感觉不对。我已经看到了各种 CL 实现的扩展,并听说了 MOP 的承诺。

我已经避开了这个,因为我担心它会破坏一些 CL 实现的功能,但我最近看到了Closer-to-Mop 项目

核心问题: MOP 是否提供了一种更有效的方法来专门研究长度?有什么我应该关注的领域/技术吗?

0 投票
1 回答
244 浏览

java - Groovy/Java:从 Java 中看不到 JDK 类中的方法注入

我正在尝试将代码注入 JDK 类,Integer. 只要我留在 Groovy 中,注入就可以工作,但如果我尝试使用来自 Java 客户端的注入代码,则不会。

这是问题的演示。

以下 Groovy 代码...

...给了我正确的输出:

g.groovy现在,我从以下内容中删除所有内容class G

然后,我编译g.groovy

然后,我尝试使用以下注入U.java

我得到的结果是这样的:

注射显然不起作用!

0 投票
1 回答
704 浏览

common-lisp - sbcl / CLOS 为什么我必须在这里添加一个“validate-superclass”-Method?

在 SBCL 中,当我定义新的元类时

并向GF“make-instance”添加一个方法:

如果我尝试创建实例,我会收到错误消息:

现在,如果我添加所需的定义:

有用:

我的问题是:为什么需要这样做?

从我的 POV 来看,将 count-class 声明为 standard-class 的派生类就足够了,就像我在第一步中所做的那样。

0 投票
3 回答
2000 浏览

common-lisp - 有没有办法访问 CLOS 中超类列表中的插槽?

有没有办法访问 CLOS 中的超类插槽?

例如,在 Objective CI 中可以执行

这会向 frob 的(唯一)超类发送消息。

仔细阅读 CLOS 文档建议DEFCLASS在类创建时合并所有超类信息,因此这种与超类通信的能力会丢失。这个对吗?

编辑:

这个场景有点不寻常:

给定的类

比如说,如何拥有一个方法,BEHAVIOR-TYPES或者GET-BEHAVIOR当使用 type 的对象调用时horse返回的方法'(:eat :sleep :drink :buck :gambol :neigh)。也就是说,通过槽继承“添加”到 initform 而不是替换它。

一个简单的解决方案是,而不是将数据分配给类,而是使用这样的通用方法:

但是,此解决方案将数据移动到defgeneric它正确所属的类而不是类中。所以这个问题的动机就来自于此。

无论如何——所提出的问题反映了对 CLOS 设计的误解。按照要求和在正常框架内执行此任务是不可能的。但是,下面给出了两种不同的方法,使用 MOP 来解决我提出的问题。

0 投票
1 回答
336 浏览

perl - 在运行时修改 Moose::Role 的属性

我有一个 Moose::Role,其中包含一个网络客户端作为属性:

当然,我有几个使用这个角色的具体 Moose 类:

现在涉及到小部件的功能测试。我们有能力创建ThingyServer对象,直接使用 ThingyServer 对象而不是启动守护程序并让 ThingyClient 通过网络连接到它会更快,整体上也很棒。由于 ThingyClient 和 ThingyServer 方便地具有完全相同的方法,这应该很容易实现。但当然,Moose 要求我在测试最终构建 BlueWidget 时使用 ThingyClient。

我做了一些研究,发现了 Moose::Meta 文档。看起来很完美!所以这里是测试代码:

我打算添加一个新属性,但我想我会先检查角色和类的状态。现在,如果我转储 $metarole,它看起来很棒。不再有 network_thingy 属性。但是,如果我构建一个 BlueWidget 类,或者只是在元类中达到顶峰......

……果然network_thingy还在。这根本不是我所期望的。如何在运行时修改/删除/替换 Widget 角色的属性?