Jan*_*kie 26 variables perl ternary-operator
我在Perl 5.8上,我需要指定一个默认值.我最终这样做了:
if ($model->test) {
$review = "1"
} else {
$review = ''
}
Run Code Online (Sandbox Code Playgroud)
值$model->test将是"1"或未定义.如果有某些内容$model->test,则将$review其"1"设置为等于''.
因为它不是Perl 5.10我不能使用新的时髦定义的或运算符.我的第一反应是使用这样的三元运算符......
defined($model->test) ? $review = "1" : $review = '';
Run Code Online (Sandbox Code Playgroud)
但那也不起作用.
有谁知道如何更有效地分配这个?珍妮
小智 38
我通常把它写成:
$review = ( defined($model->test) ? 1 : '' );
Run Code Online (Sandbox Code Playgroud)
其中括号是为了清楚其他人阅读代码.
ike*_*ami 22
你有一个优先问题.你有什么是一样的
( defined($model->test) ? $review="1" : $review ) = '';
Run Code Online (Sandbox Code Playgroud)
你可以让它与parens一起工作.
my $review; $model->test ? ( $review='1' ) : ( $review='' );
Run Code Online (Sandbox Code Playgroud)
但是将这项任务移出去会更加清晰.
my $review = $model->test ? '1' : '';
Run Code Online (Sandbox Code Playgroud)
当然,你可以简单地使用
my $review = $model->test || '';
Run Code Online (Sandbox Code Playgroud)
但为什么将undef更改为空字符串?
my $review = $model->test;
Run Code Online (Sandbox Code Playgroud)
tch*_*ist 11
$model->test将是"1"或未定义.如果有东西$model->test,设置$review为"1"否则设置它''
然后使用这个:
$review = $model->test || "";
Run Code Online (Sandbox Code Playgroud)
除了条件运算符,我经常喜欢使用do,它返回上一个计算表达式的值:
my $review = do {
if( ... ) { 'foo' }
elsif( ... ) { 'bar' }
elsif( ... ) { 'baz' }
else { 'defaut' }
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28776 次 |
| 最近记录: |