问题标签 [moose]

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

perl - 使用元编程在 Perl 中实现 SOAP 客户端是否明智?

我目前正在处理一个代码库,其中包含使用 SOAP::WSDL 生成的几十个类。然而,与 Moose 合作后,我现在认为在运行时在元级别(即不是磁盘上的文件而是直接生成对象)生成这些类可能是一个更好的主意(此时完全排除性能原因)。

  1. 这种方法明智吗?这个想法是避免更改生成的代码,也避免偶尔重新生成它。

  2. 如果是这样,是否有任何现成的 Perl 模块可以从 WSDL 创建类?

0 投票
2 回答
1068 浏览

perl - Moose:扩展 Exporter 会导致构造函数消失?

这是我无法弄清楚的奇怪事情。我有一个 Moose 类,我还想使用古老的标准 Exporter 模块导出一些常量。但是,一旦我添加extends Exporter到我的类中,由于某种原因,默认的 Moose 构造函数不再被继承,并且我得到了致命错误:

这是一个演示问题的简单测试。

删除extends线使问题消失。

这是使用 Moose 0.93。

0 投票
3 回答
273 浏览

perl - 当提供相同的必需属性时,是否可以检索现有的驼鹿对象,而不是创建一个新对象?

假设我有以下 Moose 包:

然后我创建两个对象并将一个添加为另一个的“NEIGHBOUR”属性:

在其他地方,例如在另一个过程中,$b 的 BCCH 属性可以更新为另一个值:

现在,如果我指

那么我仍然会取回 BCCH 属性的初始值,而不是更新后的值。

我想明智的做法是添加对 $b 而不是 $b 本身的引用,这将解决问题:

但是,我在 Web 应用程序中有这样的场景,其中一个等效于 $b(相同 ID)的对象在多种方法中被实例化,并且可以在任何一种方法中进行更改,这使得传递所有创建对象的引用变得困难。

理想情况下,当调用

制作完成后,只有在不存在具有相同 ID 的对象时才应创建对象。

是一本字典要走的路,像这样:

还是有更整洁的解决方案?

0 投票
2 回答
915 浏览

perl - 如何防止在调用 new 时设置 Perl Moose 只读属性?

我想简单地在 Moose 中声明一个只读属性,该属性无法在对 new 的调用中初始化。所以在声明以下内容后:

我不希望以下工作:

0 投票
1 回答
625 浏览

perl - 有什么方法可以在 Moose 对象中使用 Moose::Exporter 吗?

我正在寻找一种从父Moose类而不是独立实用程序类中设置一些帮助方法的方法。如果可能的话,这将是一种将 Moose 糖添加到模块中的更透明的方式,因为它不需要明确要求任何辅助模块(因为一切都将通过extends声明来实现)。

根据文档中提供的示例,这大致是我想要的:

但是,这不起作用:

PS。我也尝试将导出魔法移动到一个角色(with Role;而不是extends Parent;)中,但是会发生同样的错误。

0 投票
3 回答
2107 浏览

perl - 如何调用存储在 Perl 哈希中的函数名称?

我确定这在某处的文档中有所介绍,但我一直无法找到它......我正在寻找可以调用名称存储在哈希中的类上的方法的语法糖(而不是一个简单的标量):

如果我首先复制$hash{func}到一个标量变量中,那么我可以调用Foo->$func就好了......但是缺少什么来启用Foo->$hash{func}工作?

(编辑:我并不是要通过调用类上的方法来做任何特别的事情Foo——这可以很容易地成为一个有福的对象(在我的实际代码中它是);编写一个自包含的方法更容易使用类方法的示例。)

编辑 2:为了完整起见下面的评论,这就是我实际在做的事情(这是在 Moose 属性糖库中,使用Moose::Exporter创建):

我已经用这个替换了上面的标记行:

PS。我刚刚注意到,同样的技术(使用 Moose 元类来查找 coderef 而不是假设其命名约定)也不能用于谓词,因为Class::MOP::Attribute没有类似的get_predicate_method_ref访问器。:(

0 投票
3 回答
1984 浏览

perl - Moose ArrayRef 属性以数组形式返回

我有一个 Moose 类,其属性是 ArrayRef(只读),并由对象在内部进行操作。但是当有人调用访问器方法时,我希望它返回一个数组(或列表)而不是引用。这不仅会减少类用户必须执行的取消引用的数量,而且意味着他们不会意外篡改我的对象正在使用的同一个 ref。

那么最好的方法是什么?某种胁迫?

0 投票
3 回答
498 浏览

perl - 如何使用 Moose 从属性的元对象创建值的实例?

我正在开发一个序列化工具,使用 Moose 来读取和写入符合非标准格式的文件。现在,我根据类中对象的默认值确定如何加载下一项,但这有其自身的缺点。相反,我希望能够使用属性元类中的信息来生成正确类型的新值。我怀疑有一种方法可以确定“isa”限制是什么并从中派生一个生成器,但我在 Moose::Meta::Attribute 或 Class::MOP::Attribute 中没有看到可以帮助我的特定方法。

这是一个更进一步的例子。假设我有以下课程:

(进一步解释:My::Role::LoadMy::Role::Save为此文件类型实现序列化角色。它们遍历它们所附加到的类的属性,并查看属性类以获取序列化顺序。)

My::Role::Load角色中,我可以遍历该类的元对象,查看所有可用的属性,并仅选择那些具有我的 Order 特征的属性:

现在,我需要知道isa元属性所代表的属性。现在,我通过获取它的一个实例来测试它,并用类似这样的东西对其进行测试:

但是,正如您在 中看到的# <-- ERROR PRONE PROBLEM HERE!,整个过程依赖于属性中的一个值!如果值为 undef,我不知道要加载什么。我想$attribute->get_value($self)用一种方法来获取有关需要加载的值类型的信息。我的问题是,我在上面链接到的文档Class::MOP::Attribute似乎Moose::Meta::Attribute没有任何方法可以获取属性应该获取的对象类型。

属性的类型信息基本上就是我想要得到的。

(给未来的读者注意:这里的答案让我开始了,但它本身并不是最终的解决方案。你必须深入研究Moose::Meta::TypeConstraint课程才能真正做到我在这里寻找的东西。)

0 投票
4 回答
559 浏览

perl - 如何找到从 Perl 中的包继承的所有包?

我有许多不同的站点,我从这些站点下载数据并将其转换为其他格式(使用 Perl)以供工作使用,它们都是从一个 Perl 脚本运行的,有点像这样:

等等等等。目前每个My::Package都是自己的包;它不会从基本包或任何东西继承。我计划使用重新编写它们Moose,我希望不必编辑每次添加新包时运行下载的 Perl 脚本,可能有一种方法可以找到从基本包继承的包,并且然后在循环中实例化每个并进行下载,有点像这样:

它,或者类似的东西,可能吗?

TIA

0 投票
3 回答
395 浏览

perl - 如何同时分配多个 Moose 属性?

我正在逐渐对一些代码进行 Moose-ifying,这些代码从分隔的管道中读取行,拆分每个行并分配使用散列切片将它们添加到散列中。

我已经将哈希变成了 Moose 类,但现在我不知道如何快速将文件中的字段分配给类的属性(如果有的话)。

我知道我可以很容易地做到:

但我希望有一个快速的一个班轮一次性分配所有属性,有点类似于:

我读过关于强制的文章,但据我所知,这不是我所追求的。

可能吗?

谢谢