这里" info_vcf"是一个" info_vcf_function"是一种方法。 " getValueFromInfoColum"和" getValueFromFormatColum"这两种方法都存在于" info_vcf_function"方法。 现在我想打电话给" getValueFromInfoColum"和" getValueFromFormatColum"来自内部的两种方法" info_vcf_function"方法。这该怎么做 ?
它给了我错误" “Tuple [元组,任意],Dict []]'值为" [[info_vcf = HASH(0x1ac7fd0),info_vcf = HASH(0x1ac7fd0)," anop" ],{}],内部验证错误是:\ n [+] Valida '元组[对象,任何]'值为" [info_vcf = {},info_vcf = {}," anop" ]" \ n [+]比类型约束更多的值!"在/usr/local/share/perl/5.22.1/MooseX/Method/Signat ures / Meta / Method.pm第432行。 MooseX :: Method :: Signatures :: Meta :: Method :: validate(MooseX :: Method :: Signatures :: Meta :: Method = HASH(0x3bd0e60),ARRAY(0x3154e80))在/ usr / local / share /的Perl / 5.22.1 / MooseX /甲基 od / Signatures / Meta / Method.pm第148行 info_vcf :: info_vcf_function(info_vcf = HASH(0x1ac7fd0),info_vcf = HASH(0x1ac7fd0)," anop")在testone.pl第24行调用#34;#!/usr/bin/perl -w
use MooseX::Declare;
class info_vcf {
method info_vcf_function($selectedVariant) {
print "$selectedVariant";
getValueFromInfoColum("singh");
getValueFromFormatColum("ranawat");
}
method getValueFromInfoColum($flag){
print "$flag\n";
}
method getValueFromFormatColum($flag){
print "$flag\n";
}
}
1;
my $object = info_vcf->new();
$object->info_vcf_function("anop");
答案 0 :(得分:2)
这里有些困惑。我不确定你认为这两条线在做什么:
getValueFromInfoColum("singh");
getValueFromFormatColum("ranawat");
这些是类中的方法,需要在对象上调用,例如$some_object->getValueFromInfoColumn($string)
。您不能像没有对象一样调用它们(更新:,严格地说,没有对象或类),就像在本例中那样。那你为什么要在课堂定义中给他们打电话呢?
将这两行注释掉后,您的代码将按预期工作(尽管对于类定义和使用该类的代码在单独的文件中更常见)。但是,除非你更多地解释你认为这些电话正在做什么,否则很难给出比“删除两条断线”更好的建议。
更新:另外,请注意,所有小写的类名都是为 pragmata 保留的 - 这些类只是通过加载来改变Perl编译器的行为。您的类不是其中之一,因此您不应使用全小写的名称。
更新2:现在您已将此添加到问题中:
现在我想从“info_vcf_function”方法中调用“getValueFromInfoColum”和“getValueFromFormatColum”两种方法。怎么做?
这很简单。您在特定对象上调用方法。在方法内部,当前对象将位于$self
变量中。所以我想你想要这个:
#!/usr/bin/perl -w
use MooseX::Declare;
class info_vcf {
method info_vcf_function($selectedVariant) {
print "$selectedVariant";
$self->getValueFromInfoColum("singh");
$self->getValueFromFormatColum("ranawat");
}
method getValueFromInfoColum($flag){
print "$flag\n";
}
method getValueFromFormatColum($flag){
print "$flag\n";
}
}
1;
my $object = info_vcf->new();
$object->info_vcf_function("anop");
正如我在评论中所说,MooseX::Declare已被弃用。这意味着你不应该将它用于新代码。文档建议改为使用Moops。
答案 1 :(得分:0)
感谢大家,最后还要工作
#!/usr/bin/perl -w
use MooseX::Declare;
class info_vcf {
method info_vcf_function($selectedVariant) {
print "$selectedVariant";
$self->getValueFromInfoColum("singh");
$self->getValueFromFormatColum("ranawat");
}
method getValueFromInfoColum($flag){
print "$flag\n";
}
method getValueFromFormatColum($flag){
print "$flag\n";
}
}
1;
my $object = info_vcf->new();
$object->info_vcf_function("anop");