是否可以将 PHP 中的 match 语句与数组解构结合起来,以实现类似函数式编程中的模式匹配之类的功能?

问题描述 投票:0回答:1

我希望这样的事情能够发挥作用:

$bar = match (foo()) {
    [] => throw Exception,
    [, ] => throw Exception,
    [$x] => $x,
};

在哪里,我会测试

foo()
是否给出恰好包含一个元素的数组,如果是,则将该一个元素存储在
$bar
中,否则抛出异常。

当然,我可以使用

if
语句来完成此操作,但希望有类似于此语法的功能。

它不起作用,因为它在

[, ]
Cannot use empty array elements in arrays
上失败,在
$x
Undefined variable
上失败 - 两者都符合预期。

我的动机来自函数式编程,类似的东西也可以工作。有没有办法编写类似于我上面的代码的东西?

php functional-programming pattern-matching destructuring
1个回答
0
投票

我能想到的最接近的方法是更改使用

count()
的条件,以便 if 与元素数量匹配。

$bar = match (count($a = foo())) {
    1 => current($a),
    default => throw new Exception,
};

这很笨拙,而且还必须在支票中包含作业,这会降低它的吸引力。

© www.soinside.com 2019 - 2024. All rights reserved.