In 运算符§
有关中缀 andthen,请参阅主要文档 上下文
andthen
运算符在遇到第一个 未定义 的参数时返回 Empty
,否则返回最后一个参数。最后一个参数按原样返回,根本不会检查其是否已定义。短路。左侧结果绑定到右侧的 $_
,或者如果右侧是 Callable
(其 count 必须为 0
或 1
),则作为参数传递。
此运算符的一个方便用法是将例程的返回值别名为 $_
,并对其进行额外的操作,例如打印或将其返回给调用者。由于 andthen
运算符短路,因此右侧的语句不会执行,除非左侧已定义(提示:Failure
从未定义,因此您可以使用此运算符处理它们)。
sub load-dataload-data.first: /good/ andthen say "$_ is good";# OUTPUT: «(good data is good)»load-data() andthen .return; # return loaded data, if it's defineddie "Failed to load data!!";
只有当子例程返回与 /good/
匹配的任何项时,上面的示例才会打印 good data is good
,并且在加载数据返回已定义的值之前,它会死掉。别名行为允许我们通过运算符传输值。
andthen
运算符与 with
语句修饰符 紧密相关,并且一些编译器将 with
编译为 andthen
,这意味着这两行的行为等效
.say with 42;42 andthen .say;