In 运算符§
有关 infix notandthen,请参阅主要文档 在上下文中
notandthen
运算符在遇到第一个 defined 参数时返回 Empty
,否则返回最后一个参数。最后一个参数按原样返回,根本不会检查其是否已定义。短路。左侧的结果绑定到右侧的 $_
,或者如果右侧是 Callable
(其 count 必须为 0
或 1
),则作为参数传递。
乍一看,notandthen 似乎与 orelse 运算符相同。区别很微妙:notandthen 在遇到 defined 项(不是最后一项)时返回 Empty
,而 orelse 返回该项。换句话说,notandthen 是在项目未定义时采取行动的一种手段,而 orelse 是获取第一个已定义项目的一种手段
sub all-sensors-downsub first-working-sensorall-sensors-down Nil, Nil, Niland say 'OMG! All sensors are down!'; # OUTPUT:«OMG! All sensors are down!»say first-working-sensor Nil, Nil, Nil; # OUTPUT:«default sensor»all-sensors-down Nil, 42, Niland say 'OMG! All sensors are down!'; # No outputsay first-working-sensor Nil, 42, Nil; # OUTPUT:«42»
notandthen
运算符与 without
语句修饰符 密切相关,一些编译器将 without
编译为 notandthen
,这意味着这两行的行为相同
sub good-things'boo'.say without good-things;good-things() notandthen 'boo'.say;