当前位置: 首页 > 知识库问答 >
问题:

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

范文昌
2023-03-14

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

  • 按键筛选
  • 转换值
  • 等等

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

当我尝试使用foreach($generator as$key)迭代非引用生成器时=

只有当生成器声明它产生引用时,您才能按引用迭代生成器

有没有办法找出,如果生成器在手返回引用?我没有成功地使用反射:

$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();
}

共有1个答案

全昊焜
2023-03-14

使用ReflectionGenerator和getFunction似乎是可行的。

http://sandbox.onlinephpfunctions.com/code/92ed79dc7a6e925243f0c55898a5d1170f994189

<?php

function &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
 类似资料:
  • 我正在编写一个通用组件,该组件封装了一个生成器并执行常规操作: 按键筛选 转换值 等等 为了尽可能接近地模拟包装生成器,如果生成器使用引用,我想使用引用。 当我尝试使用 构造的情况下迭代生成器对引用完全不起作用:

  • 问题内容: 我是第一次编写Web服务。我基于Jersey创建了一个RESTful Web服务。而且我想 产生JSON 。我需要怎么做才能生成正确的Web服务的JSON类型? 这是我的方法之一: 仅指出方法的注释就足够了吗?那么此方法可能返回任何类型的对象?还是只有String?我是否需要对这些对象进行其他处理或转换? 作为初学者,请帮助我解决这些问题。提前致谢! 问题答案: 您可以使用jaxb注释

  • 我第一次编写web服务。我基于Jersey创建了一个RESTful web服务。我想制作JSON。要生成web服务的正确JSON类型,我需要做什么? 这是我的方法之一: 我简单地为我的方法指出注释就足够了吗?那么这个方法可能返回任何类型的对象?或者只返回String?我是否需要对这些对象进行额外的处理或转换? 作为初学者,请帮助我解决这些问题。提前谢谢!

  • 问题内容: 作为一个完整的Python新手,它肯定是这样。运行以下… …我注意到:(a)确实有一种方法,这似乎是生成器所必需的,并且(b)只能迭代一次,这是著名标记答案中所强调的生成器的特征。 另一方面, 关于如何确定对象是否为生成器的这个问题,两个最受好评的答案似乎表明它 没有 返回生成器。 …虽然对该问题的第三次不良评价似乎表明实际上 确实 返回了一个生成器: 发生什么了?是发电机吗?从某种意

  • 问题内容: 我需要在maven pom.xml文件中设置一个属性,该属性应该是UUID。谁能告诉我 将属性设置为UUID的最佳方法是什么? 我正在使用启动gigaspaces的配置文件,并且gigaspaces需要组名, 想要唯一(uuid)。因此,在我的个人资料中,我想设置一个groupName属性值 每次构建都应更改。我自己写了一个UUIDGenerator插件,因为没有找到任何插件。 因此,

  • 问题内容: 我正在遍历Jar文件中的类,希望找到那些不是抽象的类。我可以通过实例化类并捕获InstantiationException来解决此问题,但是由于某些类的启动工作量很大,因此性能会受到影响。我在Class.java文档中找不到明显类似于isAbstract()的东西。 问题答案: 当您在类对象上调用getModifiers()时,它将抽象作为其修改器之一。 该链接应该有所帮助。 也: h