【发布时间】:2015-04-13 08:56:05
【问题描述】:
我正在使用 Hack 并尝试使用 yield 关键字创建一个生成器函数。 documentation 声明此类函数的返回类型应该是 Continuation 接口。但是,在生成器函数的源代码示例上运行 hh_client 时,我得到以下输出:
./test.php:4:3,7: 无效的产量(打字[4110])
./test.php:3:17,28: 这是一个 Continuation 类型的对象
./test.php:4:3,7: 与 Generator 类型的对象不兼容(函数体中带有 'yield' 的函数的结果)
这是test.php:
<?hh
function gen(): Generator<int> {
yield 1;
yield 2;
yield 3;
}
function foo(): void {
foreach (gen() as $x) {
echo $x, "\n";
}
}
foo();
将结果类型更改为Generator 会给出更多警告。输入生成器函数的正确方法是什么?
【问题讨论】:
-
你试过没有结果类型吗?就像在文档中一样 docs.hhvm.com/manual/en/language.generators.syntax.php
-
是的,这行得通,但有点违背了目的。为了能够将脚本定义为 strict hack,必须定义返回类型。