如何确定生成器是否产生引用?

我正在编写一个通用组件,它包装了一个生成器并进行常规操作:


按键过滤

改变价值

ETC。

为了尽可能接近地模拟包装的生成器,如果生成器正在使用引用,我想使用引用。


当我尝试使用方法迭代非引用生成器时foreach ($generator as $key => &$value),我收到以下错误:


如果生成器声明生成按引用,则只能按引用迭代生成器


有没有办法查明手头的生成器是否正在返回引用?我使用反射没有成功:


$reflectedGeneratorValueSupplier = new \ReflectionMethod($generator, 'current');

$this->canReference = $reflectedGeneratorValueSupplier->returnsReference(); //always false

此外,不使用foreach构造的迭代生成器对于引用根本不起作用:


while ($generator->valid()) {

    $key = $generator->key();

    $value =& $generator->current(); //error, only variables can be passed by reference

    

    $generator->next();

}


动漫人物
浏览 92回答 1
1回答

一只斗牛犬

使用ReflectionGenerator然后使用getFunction似乎可行。<?phpfunction &generate(&$arr){    foreach ($arr as $key => &$value) {        yield $key => $value;    }};$input = range(0,100);$generator = generate($input);$r = new ReflectionGenerator ($generator);var_dump($r->getFunction()->returnsReference()); // true
打开App,查看更多内容
随时随地看视频慕课网APP