在Raku中如何仅为已定义值赋值?求规范实现方式
Raku中仅当变量已定义时赋值的规范实现方式
你尝试的my $FOO with= $foo;不是Raku的合法语法,所以无法生效。以下是几种规范的实现方式:
原写法的简化(准确匹配需求)
你最初的写法本身就是规范且有效的,还可以简化判断逻辑——defined方法支持后缀形式调用:my $FOO = $foo if $foo.defined;这段代码会在
$foo已定义时,将其值赋给新声明的$FOO;若$foo未定义,$FOO会被声明但保持未初始化状态(值为Any)。使用
with代码块(更符合Raku惯用风格)with是Raku中专门处理已定义值的语法构造,仅在目标变量已定义时执行代码块,块内可用$_指代该变量:# 若仅在块内使用$FOO,可直接在块内声明 with $foo { my $FOO = $_; # 这里编写依赖$FOO的逻辑 } # 若需要$FOO在块外可用,提前声明后赋值 my $FOO; with $foo { $FOO = $_; }这种方式的优势是能将所有依赖
$FOO的逻辑包裹在with块内,自然规避未定义值的处理问题。使用
//操作符(统一赋值为已定义值或Nil)
如果你希望无论$foo是否定义,$FOO都有明确值(未定义时设为Nil),可以用//操作符(取第一个已定义的操作数):my $FOO = $foo // Nil;
内容的提问来源于stack exchange,提问作者Jim Bollinger
相关产品推荐
相关产品推荐

