问题标签 [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 - Moose::Error::Croak 错误报告不是从调用者的角度来看的
我最近刚开始研究 Moose,它是一个很棒的 OO 框架,不仅可以使用而且可以学习新的 OO 概念。我想做的一件事是在对象创建期间从调用者的角度进行错误报告。我看到 Moose 有模块 Moose::Error::Croak 告诉 Moose 通过 croak 调用覆盖默认错误报告。我用过,但似乎没有帮助
驼鹿代码 - Foo.pm
驼鹿代码 - fooser.pl
这失败并出现错误:/usr/local/lib/perl/5.8.8/Class/MOP/Class.pm 第 364 行需要属性 (attr1)
如果没有使用 Moose::Error::Croak,这将比实际的堆栈跟踪更简洁。但它没有从调用者的角度报告它。如果这是一个 Perl 5 OO 代码并且我有 Foo.pm 为:
如果 fooser.pl 被执行,我会得到错误:
“错误:未在 fooser.pl 第 6 行提供 attr1”
这是从调用者的角度来看的,因为它指向行号。fooser.pl 的第 6 行而不是 MOP.pm 的第 6 行。364.
我怎样才能在 Moose 中做到这一点?或者我在这里误解了什么?
perl - 在 Mac 上安装 Moose 时出现问题(编译 Sub::Name prereq)
我正在尝试在我的 Macbook Pro 上安装 Moose(一个 CPAN 模块)。它找到了对 Sub-Name 的依赖关系,当它尝试安装它时,会收到以下错误消息。关于如何治愈这个的任何想法?
+++ 附录 +++
我尝试了使用命令 sudo port install p5-moose 的建议
安装报告成功,但其中包含“use Moose”的文件给出:
我想知道当我从旧机器(前 Intel)移到这台机器时,是否移动了二进制文件,我现在需要重新编译。但是,如果是这样,我该怎么做?
perl - 如何将 Moose 与 Test::Class 一起使用?
我目前正在重构由一位同事构建的测试套件,并希望Test::Class[::Most]
在这样做时使用。当我开始时,我发现我真的可以使用几个Moose
角色来稍微解耦代码。但是,这似乎不太可能——我收到这样的错误消息:
所以问题是:我可以Moose
一起使用Test::Class
吗?如果可以,如何使用?
PS:代码如下:
perl - 如何让 Moose 返回一个子类实例而不是它自己的类,以实现多态性
我想创建一个泛型类,它的构建器不会返回这个泛型类的实例,而是一个专用子类的实例。
由于 Moose 进行自动对象构建,我不明白这是否可能,以及如何使用 Moose 语法创建一个 Moose 类并具有这种行为。
例如:用户询问:$file = Repository->new(uri=>'sftp://blabla')
.... 并返回一个 `Repository::_Sftp` 实例
用户会像使用$file
Repository 实例一样使用它,而无需知道真正的子类(多态性)
注意:
根据要求,也许我应该更清楚我想要实现
的目标:我的课程的目的是能够通过简单地创建一个“隐藏”存储库来添加新的存储库方案(例如通过 sftp): _Stfp 类,并在 Repository 构造函数中添加一个案例,以根据 url 制造正确的专用对象。存储库就像一个虚拟基类,提供专门对象将实现的接口。
所有这些都是为了添加新的存储库方案,而无需修改程序的其余部分:它会在不知不觉中处理专门的实例,就好像它是一个存储库实例一样。
perl - 如何在运行时将现有的 Moose 角色组合到一个类中?
假设我定义了一个抽象的 My::Object 和具体的角色实现 My::Object::TypeA 和 My::Object::TypeB。出于可维护性的原因,我不希望有一个查看对象类型并应用角色的硬编码表。作为一个 DWIMmy 示例,我正在 My::Object 中寻找类似的内容:
通过执行以下操作,让我获得一个带有 My::Object::TypeB 角色的 My::Object:
这会做我想做的事还是我走错了路?
编辑:我简化了太多;我不想在实例化对象时知道类型,我希望对象确定其类型并适当地应用正确的角色方法。我已经编辑了我的问题以使其更清楚。
perl - Perl Moose::Util::TypeConstraints 错误?关于名称的这个错误有什么无效字符?
那是我跟踪 Moose::Util::TypeConstraints 异常的几个小时,我不明白它在哪里检查类型并告诉我名称不正确。我将错误跟踪到一个简化的示例以尝试定位问题,它只是告诉我我没有得到它。
我遇到了 Moose::Util::TypeConstraints 错误吗?
下面是崩溃的代码:
perl - Perl OO 框架和程序设计 - Moose 和 Conway 的由内而外的对象 (Class::Std)
这更像是一个用例类型的问题......但也足够通用,可以更广泛地适用:
简而言之,我正在开发一个或多或少是命令行包装器的模块。OO 自然。不涉及太多细节(除非有人想要它们),系统并没有非常复杂,但在这个框架中拥有三四个对象确实感觉很自然。最后,我将把它放在那里,而不是由同一家公司的几个开发人员共同开发的模块。
首先,我使用 Class::Std 实现了 OO,因为 Perl Best Practices (Conway, 2005) 为为什么要使用由内而外的对象提出了很好的论据。完全控制访问哪些属性等等,适当的封装等等。而且他的设计非常简单和聪明。
我喜欢它,但后来注意到没有人真正使用它;事实上,康威本人似乎不再推荐这个了?
所以我搬到了大家最喜欢的Moose。它很容易使用,尽管对于我想要做的事情来说方式太过分了。最大的主要缺点是:它有大量的模块依赖关系,迫使我的模块的用户全部下载它们。一个小缺点是它的功能比我真正需要的要多得多。
什么是建议?强迫其他开发人员使用可能已过时的模块,或者强迫模块的每个用户下载 Moose 及其所有依赖项,给其他开发人员带来不便?
对于流行的适当的 Perl OO 框架,是否有第三种选择,但这两个都没有?
perl - 与 mod_perl2 moose 应用程序的数据库连接过多
我有一个基于 mod_perl2 的 Web 应用程序,需要连接到 mysql 数据库。我已经以驼鹿角色实现了 SQL 连接细节。
简化后,角色如下所示:
然后我在所有需要连接到数据库的驼鹿类中使用这个角色
陈述。
虽然这在创建几个对象时效果很好,但当创建多个对象时我很快就会遇到麻烦。例如,在 httpd 日志中,我收到错误消息:
DBI connect('alcatelRSA;host=10.125.1.21;port=3306','tools',...) 失败:C:/Perl/site/lib/DBIx/Connector.pm 第 30 行的连接太多
我考虑过每次都使用 DBIx::Connectors "disconnect" 调用来关闭与数据库的连接,但是根据需要打开/关闭连接对性能的影响似乎很严重。
你对这个问题有什么替代建议吗?
perl - Moose 只读属性 Traits 以及如何设置它们?
如何设置 Moose 只读属性特征?
如果不能在构造函数或运行时设置只读属性特征,它的目的是什么?我在Moose::Meta::Attribute中缺少什么吗?有没有办法设置它使用meta
?
perl - Moose 中的单例角色
我正在尝试使用 Perl 和 Moose 编写单例角色。我知道 MooseX::Singleton 模块是可用的,但是当我们的项目需要另一个 CPAN 模块时总是会遇到阻力。在尝试了这个并遇到了一些麻烦之后,我想了解为什么我的方法不起作用。我写的单例角色如下:
当只有一个类使用单例角色时,这似乎有效。但是,当两个类(例如 ClassA 和 ClassB)都使用 Singleton 角色时,它会出现,因为它们都引用共享的 $_singleInstance 变量。如果我调用 ClassA->getInstance 它会返回对 ClassA 对象的引用。如果我稍后在同一个脚本中调用 ClassB->getInstance,它会返回对 ClassA 类型对象的引用(尽管我清楚地为 ClassB 调用了 getInstance 方法)。如果我不使用角色并将代码从 Singleton 角色复制并粘贴到 ClassA 和 ClassB 中,它似乎可以正常工作。这里发生了什么?