加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 使用MooseX :: Params :: Validate传递的条件参数

发布时间:2020-12-16 06:12:22 所属栏目:大数据 来源:网络整理
导读:我在Perl中使用Moose包很多,使用MooseX :: Params :: Validate来定义接口.这些接口往往相当灵活,允许多个可选参数.不幸的是,这是Perl,因此返回类型将根据可选参数而变化,并且在调用者中定义的大多数情况下传递可选参数是有好处的.从这个代码库中使用从MooseX
我在Perl中使用Moose包很多,使用MooseX :: Params :: Validate来定义接口.这些接口往往相当灵活,允许多个可选参数.不幸的是,这是Perl,因此返回类型将根据可选参数而变化,并且在调用者中定义的大多数情况下传递可选参数是有好处的.从这个代码库中使用从MooseX :: Params :: Validate导出的各种方法,因此,由于处理包的各种方式,undef参数我无法通过它无论如何都会优雅.我倾向于使用以下方法,但它在评论中出现了很多,我想问是否有另一种方法来实现这种灵活性.

use strict;
use warnings;

my $bar;

Foo->foo({
    foo => 'I,Foo need a VERY flexible interface. ',$bar ? ( bar => $bar ) : ()
});

$bar = "Very flexible...";

Foo->foo({
    foo => 'I,$bar ? ( bar => $bar ) : ()
});

package Foo;

use Moose;
use MooseX::Params::Validate;

sub foo {
    my $self = shift;
    my ( $foo,$bar ) = validated_list(
      @_,foo => { isa => 'Str' },bar => { isa => 'Str',optional => 1 },);

    print $foo . $bar . "n";
}

1;

检查变量定义状态的三元运算符总是让我想要一个//类型参数选项,但我看不到任何支持这种类型的操作的地方.

调用者的答案是首选,因为我不希望(不会)更改各种包的界面,但我愿意回答显示处理未传递的参数值的方法的答案.

解决方法

正如 Craig Estey在他的评论中所说,我认为将选项传递给你的函数并且不必关心它们是否未定义是有意义的.相反,在调用MooseX :: Params :: Validate :: validated_list()之前,将未定义的散列键作为预处理步骤.例如:

use strict;
use warnings;

my $bar;

Foo->foo({
    foo => 'I,bar => $bar
});

package Foo;

use Moose;
use MooseX::Params::Validate ();

sub foo {
    my $self = shift;

    my ( $foo,);

    $bar //= 'undef';  # Just to avoid printing warning: Use of uninitialized value 
    print $foo . $bar . "n";
}

sub validated_list {
    for (keys %{ $_[0]->[0] } ) {
        delete $_[0]->[0]{$_} if !defined $_[0]->[0]{$_};
    }
    return MooseX::Params::Validate::validated_list( @_ );
}
1;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读