我希望这样的事情能够发挥作用:
$bar = match (foo()) {
[] => throw Exception,
[, ] => throw Exception,
[$x] => $x,
};
在哪里,我会测试
foo()
是否给出恰好包含一个元素的数组,如果是,则将该一个元素存储在 $bar
中,否则抛出异常。
当然,我可以使用
if
语句来完成此操作,但希望有类似于此语法的功能。
它不起作用,因为它在
[, ]
和 Cannot use empty array elements in arrays
上失败,在 $x
和 Undefined variable
上失败 - 两者都符合预期。
我的动机来自函数式编程,类似的东西也可以工作。有没有办法编写类似于我上面的代码的东西?
我能想到的最接近的方法是更改使用
count()
的条件,以便 if 与元素数量匹配。
$bar = match (count($a = foo())) {
1 => current($a),
default => throw new Exception,
};
这很笨拙,而且还必须在支票中包含作业,这会降低它的吸引力。