gpt4 book ai didi

perl - 如果传入未定义的值,则使用 Params::Validate 设置默认值

转载 作者:行者123 更新时间:2023-12-02 02:37:32 24 4
gpt4 key购买 nike

我无法让 Params::Validate 按我希望的方式工作。

#!/usr/local/bin/perl -w 
use strict;
use Params::Validate qw/:all/;
use Data::Dumper;

sub foo {
my %args = validate(@_, {
bar => {
default => 99,
# TODO - Somehow use a callback to return a default if undefined
# ??!!??
# callbacks => { call_me => sub { return 99 if !defined shift }},
},
});

# $args{bar} //= 99; # Don't want to define default in 2 places

print Dumper(\%args);
}
foo({ bar => undef });

那么我如何设置/测试 args 列表中的 undef 并用 Params::Validate 替换为所述“默认”值??

最佳答案

你需要设置 $_[0]:

call_me => sub { $_[0] = 99 if not defined $_[0] }

@_ 是传入参数的别名,因此您可以将其用作对原始参数的引用。

此外,

$args{bar} ||= 99;

会重置 bar,即使它是 0 或 ''(空字符串),这听起来不像您想要的。使用

$args{bar} //= 99;

不过,如果您使用的是 perl 5.10 或更高版本,则可以执行您想要的操作。

根据您关于不复制默认值的评论,我能想到的最好办法是:

sub foo
{
unshift @_, bar => undef;
my %args = validate(@_,
{
bar => {
optional => 1,
callbacks => {
call_me => sub { $_[0] = 99 unless defined $_[0] },
},
},
},
);
print Dumper \%args;
}

这似乎可行,但我不得不承认 - 它很丑。

关于perl - 如果传入未定义的值,则使用 Params::Validate 设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com