问题标签 [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.
perl - 如何使用 mod_perl 正确减少冗余请求的数量?
在一个相当大的遗留项目中,我将几个毛茸茸的模块重构为 Moose 类。这些模块中的每一个都需要数据库访问(惰性)获取其属性。由于这些对象被大量使用,我想减少冗余请求的数量,例如对于未更改的数据。
现在,我该如何正确地做到这一点?我有几种选择:
- 通过一个角色在我的 Moose 类中实现缓存,以将它们存储在
memcached
5-10 分钟到期(可能不太难,但对于惰性属性很棘手)更新:KiokuDB 可能在这里有所帮助,必须阅读有关属性的信息 - 迁移到
DBIx::Class
(无论如何都需要完成)并在此级别上实现缓存(DBIC 可能会自行消除大部分痛苦) - 不知何故让我的对象在 mod_perl 进程中持续存在(不知道如何做到这一点:()
你将如何做到这一点,你认为什么是理智的方式?在对象或 ORM 级别上优先缓存数据吗?
perl - 如何在使用 Moose 和 Perl 的参数化角色的方法中在运行时创建的方法中访问消费者类的方法?
我在参数化角色中定义了一个方法,该方法需要在运行时创建一个新类,Moose::Meta::Class->create
并将该确切的参数化角色应用于它。我也在为该角色制作一种新方法,使用
在 sub {...} 内部我想访问消费者类的方法并将其用于某些事情,我尝试过 using $self->get_method
,它没有用,我该怎么做?
请注意,$self
上面的子里面是MooseX::Role::Parameterized::Meta::Role::Parameterizable
如果我这样做,我还有另一个问题:
为什么不是$object
some_type 类型,它有些丑陋 MooseX::Role::Parameterized::Meta::Role::Parameterizable
,我如何获得 some_type 类型的对象?
perl - 如何创建一个新的 Moose 类并在运行时实例化该类的对象?
使用创建元类后Moose::Meta::Class->create
,如何将该类作为元类实例化一个真正的 Moose 类?(我还需要创建元类,因为我还想为其应用一些角色。)
perl - 如何在运行时替换 Moose 对象的方法?
是否可以在运行时替换 Moose 对象的方法?通过查看Class::MOP::Method
(Moose::Meta::Method
继承自)的源代码,我得出结论
我将能够在运行时替换对象的方法。我可以使用该方法
然而,这并不完全奏效。
是否可以在运行时修改方法?而且,用 Moose 做这件事的方法是什么?
perl - 我可以使用基于 Moose 的对象将正则表达式传递给 isa() 吗?
我可以在 Moose 中使用 isa 和正则表达式作为参数吗?如果不可能,我可以用其他东西实现同样的目标->isa
吗?
好的,有以下类型 Animal::Giraffe
,Animal::Carnivore::Crocodile
我想做,我->isa(/^Animal::/)
可以这样做吗?如果我不能,我可以用什么来达到预期的效果?
perl - 使用 MooseX::Declare 对性能的影响主要是在启动期间遇到的吗?
使用 MooseX::Declare 的性能是否主要是在它发挥其初始魔力时遇到的(即将定义“翻译”成标准 Perl 语法)?即,一旦编译和初始运行时设置完成,调用 MooseX::Declare 方法与通过传统声明定义的方法是否存在性能差异?
perl - 有没有一种简单的方法来测试 Moose 属性是否是只读的?
我目前使用一个块eval
来测试我已将属性设置为只读。有没有更简单的方法来做到这一点?
工作代码示例:
更新
感谢friedo、Ether 和Robert P 的回答以及Ether、Robert P 和jrockway 的评论。
我喜欢 Ether 的答案如何$is_read_only
通过用!
. 双重否定也提供了这一点。因此,您可以$is_read_only
在is()
函数中使用,而无需打印出 coderef。
有关最完整的答案,请参阅下面的 Robert P 的答案。每个人都非常乐于助人,并建立在彼此的答案和评论的基础上。总的来说,我认为他对我的帮助最大,因此他现在被标记为已接受的答案。再次感谢 Ether、Robert P、friedo 和 jrockway。
如果您可能想知道,就像我一开始所做的那样,这里是关于get_attribute
和find_attribute_by_name
(来自 Class::MOP::Class)之间区别的文档:
perl - Moose:在 BUILD 方法中从文件中加载对象
我必须在 BUILD 方法中读取一个文件,并且我想使用 MooseX::Storage 包的加载方法。
但是这个加载方法会创建一个新对象,所以当我实例化该对象时,这不是从文件中读取的对象。在下面的代码中,我创建了一个状态为 2 的对象 $m1 来写入文件,我创建了没有参数的 $m2 来读取文件,但 $m2 不包含正确的值。包装:
主程序
perl - 如何用 UML 正确地表示 mixin/role/trait?
我和其他几位开发人员目前正在清理我们的遗留代码库,主要是分离视觉层和数据层。为了帮助未参与此重构的开发人员理解模型,我想介绍一个(相当非正式的)类图,其中包含关于每个类的范围和所需用途的注释。由于我很懒,我想为此使用 UMLGraph。
但是有一个小问题:我们有一个 perl 代码库,并且重构广泛使用了 Moose 角色。现在我对 UML 的了解还不够好,无法为角色找到合适的抽象——我的第一个猜测是接口,但它们也包含实现;多重继承也没有完全削减它。
我如何(或者你将如何)在类图中正确地表示角色?
perl - 当 Moose 中的基础属性发生变化时重建延迟构建的属性
我有一个带有lazy_build
属性的 Moose 类。该属性的值是另一个(非惰性)属性的函数。
假设有人用所需属性的值为 42 来实例化类。然后他们请求lazy属性,这个属性是42的函数。然后,他们还好意思改第一个属性!
懒惰的已经被构建了,所以构建器不会被再次调用,并且懒惰的属性现在已经过时了。
我现在有一个解决方案,我在所需属性上维护一个“脏”标志,而惰性属性上的访问器检查脏标志并在需要时重建它。
但是,这似乎需要做很多工作。有没有办法在 Moose 中处理这个问题,例如使用特征?