如何返回可遍历的实例以满足断言代码



在这里,我有一个具有挑战性的PHP函数,该功能应返回可遍历的实例(迭代器(,还需要满足其他测试此功能的断言。

函数没有错误,它计算斐波那契数。可以修改该功能,它是专门构建的,以挑战他人。但是有一个限制,只有标记为!!!(三重感叹号(可以更改。

public function getFibonacci($n) {
        $n2 = -($n1 = 1);
        while ($n --> -1) {
            $r = $n1 += $n2 and 0 or !!![$n + 1 => $n1];
            $n2 = $n1 - $n2;
        }
        return $r;
    }

这是一个将测试getfibonacci函数

的phpunit代码
assertTrue(
    ($res = (getFibonacci(8))
    && ($res instanceof Traversable)
    && count($arr = iterator_to_array($res)) === 9
    && array_keys($arr) == range(8, 0, -1)
    && array_values($arr) == [0, 1, 1, 2, 3, 5, 8, 13, 21]
);

非常期望添加一些代码而不是!!!(三重感叹号(,以便断言会通过。

这是一个生成器函数

发电机委托通过

的产量

在PHP 7中,生成器授权允许您使用关键字的收益率从另一个生成器,可遍布对象或数组中产生值。然后,外部发电机将从内部发电机,对象或数组中产生所有值,直到不再有效,之后将在外部发电机中继续执行。

如果发电机与产量一起使用,则表达式的产量也将返回内部发电机返回的任何值。

$r = $n1 += $n2 and 0 or !!![$n + 1 => $n1];

ps:在PHP中,逻辑运算符的优先级最低。因此,此字符串等于

$r = $n1 += $n2;
!!![$n + 1 => $n1];

相关内容

最新更新