问题标签 [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 回答
1215 浏览

perl - 在 Moose 中处理多个继承的构造函数

问候,

我正在学习Moose,我正在尝试用 Moose 编写一个CGI::Application子类,由于 CGI-App 不是基于 Moose 的事实,这使得这变得困难。

在我的其他 CGI-App 子类中,我喜欢有一个父类,它具有setup查看子类的符号表并自动设置运行模式的方法。我想我可以使用 Moose 的元类工具以更简洁的方式实现相同的目标。所以这是我在父类中的内容:

...在我的孩子班上:

我意识到我的运行模式没有正确设置的原因是因为setup被 CGI-App 构造函数调用,并且Moose::Object在我的类中粘贴了它自己的构造函数。我试图用方法修饰符解决这个问题:

这给了我

然而,我有一种感觉,我正在以完全错误的方式解决这个问题,而 Moose 有更好的设施来实现我想要的,我还没有发现。

0 投票
1 回答
1971 浏览

perl - 使用 MooseX::Declare 关闭内联构造函数

问候,

作为我之前关于 Moose 的问题的后续,我现在遇到了一个新问题。我有一个 Moose 类,它使用配方 12来扩展非 Moose 父类。这里是:

这很好用。我也有这个类的一个子类,它使用MooseX::Declare. 但是,因为我现在覆盖了默认的 Moose 构造函数,所以我的子类会发出以下警告:

由于在幕后自动MooseX::Declare调用make_immutable,我一直无法弄清楚如何让它打开inline_constructor => 0参数。

0 投票
1 回答
372 浏览

perl - MooseX::NonMoose 类中的 mixin 问题

考虑以下:

编译时的输出是:

我为什么在乎?因为当我尝试use使用 CGI::Application::Plugin::* 类时,它希望我CGI::Application已经在编译时继承自。插件类尝试add_callback在我的类上作为类方法调用,但不能,因为我@ISA的尚未设置。

解决这个问题的最佳方法是什么?@ISA在一个块中手动调整会BEGIN干扰MooseX::NonMoose吗?

编辑

以下似乎有效,但我觉得它令人反感:

我对 Moose 的内部结构知之甚少(或任何东西,真的),不知道这是否是个好主意。

0 投票
4 回答
560 浏览

perl - 如何扩展 Moose 的自动编译指示导出?

你知道 Moose 是如何在导入过程中自动开启strict的吗?warnings我想通过打开autodieuse feature ':5.10'在我的 Moose 类中扩展这种行为。

我已经追踪到 Moose 在哪里执行此操作,在 中,它为调用和调用类的 MooseMoose::Exporter组装了一个自定义子。importstrict->importwarnings->import

但是,我想不出一种以 Moose 方式扩展此导入方法的方法。

我该如何处理?

http://www.friedo.com/bullwinkle.gif

0 投票
2 回答
697 浏览

lisp - 在 common lisp 中测试一个类是否是另一个类的子类

如何查看一个 CLOS 类是否是另一个 CLOS 类的子类?

0 投票
2 回答
1665 浏览

groovy - Groovy 方法缺失

我在对象Foo中有一个闭包,在闭包内部我定义了一个名为“ myStaticMethod ”的方法,一旦在对象Foo之外调用闭包,我就想解决该方法。我也碰巧在我的对象 Foo 中有一个具有相同名称的静态方法。当我调用闭包时,我将“解决策略”设置为 DELEGATE_ONLY 以拦截对闭包中定义的myStaticMethod的调用。

我试图通过missingMethod来实现,但该方法从未被拦截。当我做 Foo. myStaticMethod非静态,方法被拦截。尽管我的解决策略设置为 DELEGATE_ONLY,但我不太明白为什么会发生这种情况。拥有Foo.myStaticMethod静态与否无关紧要,否则我错过了一些东西

0 投票
2 回答
1040 浏览

ruby - Ruby 是否有 Metaobject 协议,如果没有,是否可以实现一个?

请原谅我的无知,但什么是元对象协议,Ruby 有吗?如果没有,是否可以为 Ruby 实现一个?如果 Ruby 拥有一个 Metaobject 协议,它可能拥有哪些特性?

0 投票
3 回答
1505 浏览

unit-testing - 用于 Java 代码的 Groovy 中的单元测试 - 如何模拟 Java 类?

我在一个用 Java 编写的大型项目中介绍了 Groovy,开始(就像大多数人一样)在 Groovy 中为 Java 类编写单元测试。

所以我遇到的问题是:

想象一下,我有 2 个 Java 类,ClassA 和 ClassB,以这种方式交互:

ClassB 是从数据库中查找一些数据的服务。我正在测试 ClassA 功能。所以我想以某种方式模拟 ClassB,所以它在我的单元测试上下文中的 invokeSomeStaticMethod() 将返回模拟值以进行测试。据我了解,这里的主要问题是这两个类都是 Java,因此 ClassB.invoke... 方法不是通过 Groovy MOP 路由的,Groovy Mocks 是基于它的。我对吗?我怎样才能达到我所需要的?

谢谢!米哈伊尔

0 投票
2 回答
635 浏览

lisp - lisp:如何在范围内创建临时方法特化

Common lisp 中:重新定义范围内的现有函数?OP要求类似的东西。但我想创建一个方法专门器,而不是一个函数。本质上假设一个方法是这样定义的:

我想做的是(伪代码):

真正的用途是我想创建一个临时环境,setf slot-value-using-class专门用于eql创建特定对象的按需截取其插槽写入。(目的是在某处记录新旧插槽值,然后调用 next 方法。)我不想创建元类,因为我可能想拦截已经实例化的标准对象。

当然,我试过了,但没有用(因为你是怎么做DEFMETHODLABELS?),但我希望一些更有经验的人来验证它以这种方式不可行和/或提出一种合适的方式。

注释?

编辑:

Daniel 和 Terje 提供了很好的链接,可以扩大我对可能性的了解,但我想在去那里之前再多推一点,寻找一种更普通的方法。我一直在考虑在进入环境时执行一个 add-method,该方法将专注于 eql,并在退出时执行一个 remove-method。我还没说完。如果有人玩过这些,评论会很好。将保持线程是最新的。

编辑 2:我很接近使用 add-method 场景来做到这一点,但有一个问题。这是我尝试过的:

使用某些对象槽和数据作为 args 调用 (my-test) 会导致:

所以我被困在这里。专业化有效,因为适用的方法现在包括 eql-specialized :after 方法,但不幸的是它似乎没有被调用。任何人都可以帮助我完成它并将其重构为一个可爱的小实用宏吗?

0 投票
2 回答
297 浏览

lisp - sbcl中奇怪的类优先级列表

在 sbcl 中,

cons 继承自 list 而不是相反,这不是很奇怪吗?我在这里想念什么?