- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过令人尴尬的调试时间后,我终于剥离了 this issue归结为一个简单的测试用例。我会谦虚地请求一些帮助来理解它失败的原因。 :) 这是我收到的错误消息:
plxc16479> $h2/tmp/tmp18.pl
This method [new] requires a single argument. at /nfs/pdx/disks/nehalem.pde.077/perl/5.12.2/lib64/site_perl/MooseX/Types/TypeDecorator.pm line 91
MooseX::Types::TypeDecorator::new('MooseX::Types::TypeDecorator=HASH(0x655b90)') called at /nfs/pdx/disks/nehalem.pde.077/projects/lib/Program-Plist-Pl/lib/Program/Plist/Pl.pm line 10
Program::Plist::Pl::BUILD('Program::Plist::Pl=HASH(0x63d478)', 'HASH(0x63d220)') called at generated method (unknown origin) line 29
Program::Plist::Pl::new('Program::Plist::Pl') called at /nfs/pdx/disks/nehalem.pde.077/tmp/tmp18.pl line 10
包装器测试脚本:
use strict;
use warnings;
BEGIN {push(@INC, split(':', $ENV{PERL_TEST_LIBS}))};
use Program::Plist::Pl;
my $obj = Program::Plist::Pl->new();
程序::Plist::Pl 文件:
package Program::Plist::Pl;
use Moose;
use namespace::autoclean;
use Program::Types qw(Pattern); # <-- Removing this fixes error
use Program::Plist::Pl::Pattern;
sub BUILD {
my $pattern_obj = Program::Plist::Pl::Pattern->new();
}
__PACKAGE__->meta->make_immutable;
1;
程序::类型文件:
package Program::Types;
use MooseX::Types -declare => [qw(Pattern)];
class_type Pattern, {class => 'Program::Plist::Pl::Pattern'};
1;
Program::Plist::Pl::Pattern 文件:
package Program::Plist::Pl::Pattern;
use Moose;
use namespace::autoclean;
__PACKAGE__->meta->make_immutable;
1;
注意:虽然在上面的代码中我不需要 Program::Types
中的 Pattern
类型,但我在其他被剥离的代码中需要。我从中提取 INC
路径的 PERL_TEST_LIBS
env var 仅包含项目模块的路径。没有从这些路径加载其他模块。
出现了 MooseX::Types Pattern
的定义导致了问题,但我不确定原因。文档显示了我正在使用的语法,但我可能滥用了 class_type
,因为没有太多关于它的说法。目的是能够使用 Pattern
通过 MooseX::Params::Validate 进行类型检查验证参数是一个 Program::Plist::Pl::Program
对象。
我发现通过从 tmp18 直接调用
包装器不会导致错误,即使导入了 Pattern->new
来从等式中删除中间类 Program::Plist::Pl
。 plProgram::Types
Pattern
类型也是如此。
最佳答案
当你说
package Program::Plist::Pl;
...
use Program::Types qw(Pattern);
您正在将名为 Pattern
的子例程导入包 Program::Plist::Pl
中。它的完全限定名称是 Program::Plist::Pl::Pattern
。因此,
Program::Plist::Pl::Pattern->new();
解析为
Program::Plist::Pl::Pattern()->new();
代替
'Program::Plist::Pl::Pattern'->new();
这就是你的意思。如果你愿意,你可以用明确的引号来写它(它会起作用),但这是一个烦人的特例。另一种解决方案是将类型重命名为不会与包名称冲突的名称(比如 PatternObj
)。
namespace::autoclean对此没有帮助。它可以防止人们将导入的子程序作为方法调用。但是您直接调用了 Program::Plist::Pl::Pattern()
,然后在其返回值上调用了一个方法。
关于perl - MooseX::Types 声明问题,严格的测试用例:),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4652716/
以下代码定义了两个类(DeckA 和DeckB),它们的区别仅在于它们是否使用MooseX::AttributeHelpers 附带的功能。 . Moose 为 DeckB 生成的 getter 不是
来自 current version (0.98)的Moose::Manual::MooseX是行: We have high hopes for the future of MooseX::Meth
我正在编写我的第一个 moose 基础程序。该程序创建了一个“状态”对象,它是由其他几个驼鹿对象组成的。在程序结束时,我希望将“状态”对象保存到文件中。我正在尝试使用 MooseX::Storage
考虑以下: package MyApp::CGI; use Moose; use MooseX::NonMoose; use Data::Dumper; extends 'CGI::Applicati
我正在运行使用包管理器安装的 Perl 5.10.1。我已经从 CPAN shell 成功安装了 Moose,我尝试安装 MooseX::Declare 扩展但没有成功。这是我所做的: $ sudo
我想用 MooseX::ClassAttribute在 一名角色。即,做类似的事情 package Cachable; use Moose::Role; use MooseX::ClassAttrib
我意识到这可能是我对 perl 或 Moose 某些部分的基本误解,但我似乎无法从 default 返回 ArrayRef方法: has '_directories' => ( is => '
使用 MooseX::Declare 的性能下降主要是在它执行其初始魔术时遇到的吗(即将定义“翻译”为标准 Perl 语法)?即一旦编译和初始运行时设置完成,调用 MooseX::Declare 方法
你好, 作为我的 previous question 的后续关于 Moose,我现在遇到了一个新问题。我有一个 Moose 类,它使用 Recipe 12为了扩展非 Moose 父类。这里是: pac
我整理了一个小测试用例来演示我的问题: package P1; use Moose; use MooseX::Storage; with Storage; has 'blah' => ( is
我最近开始使用模块 MooseX::Declare .我喜欢它的语法。它优雅而整洁。有没有人遇到过您想在一个类中编写许多函数(其中一些很大)并且类定义运行到页面中的情况?是否有任何解决方法可以使类定义
后奏 MooseX::Declare 将不再被任何人推荐,因为它依赖于 Devel::Declare,它达到了它的目的,但它本身已经过时了。此时,如果有人想要 MX::D,他们应该查看 Moops 原
有没有办法让 $self 进入 MooseX::Types 强制转换?我在对象中有其他数据,我想使用这些数据将我的强制转换从 String 转换为 Object。或者,有没有像 Class::MOP
经过令人尴尬的调试时间后,我终于剥离了 this issue归结为一个简单的测试用例。我会谦虚地请求一些帮助来理解它失败的原因。 :) 这是我收到的错误消息: plxc16479> $h2/tmp/t
我制作了一个“捆绑”模块,它做了很多事情:导入Moose , 进口 true , namespace::autoclean , 使调用者的类不可变(取自 MooseX::AutoImmute )。我无
我想使用 Moo 而不是 Moose,但我还需要从非 Moose 类继承。我应该如何处理?有没有一个模块可以解决这个问题?如果没有,有没有办法我自己处理? 最佳答案 Moo 已经可以处理子类化非 Mo
假设我有一个包含 Moose 的代码库-based 类,我希望它们都使用一组通用的 MooseX::*扩展模块。但我不希望每个基于 Moose 的类(class)都必须像这样开始: package M
Moose 非常可爱,但有时简单的拼写错误会导致令人毛骨悚然的长堆栈跟踪,在我看来,有用的内容为零。 那么,是否有任何工具可以将这种爆炸式解释为有用的东西? 特别是对于使用普通 Moose、Moose
我正在使用 MooseX::Declare 和方法,它使用 MooseX::Method::Signatures。假设我有一个类“foo”和一个方法“bar”,我已经实现了它: class foo {
我意识到这对于所有 MooseX 模块来说通常都是不可能的,特别是在模块深入研究 Moose 和 Mouse 不同的元类的情况下。 但出现这个问题是因为有时 MooseX 模块在 MouseX 命名空
我是一名优秀的程序员,十分优秀!