2016-05-12 136 views
5

我有一個函數返回一個生成器。目前,它使用yield from

function foo() 
{ 
    $generator = getGenerator(); 
    // some other stuff (no yields!) 
    yield from $generator; 
} 

如果我更換yield from用一個簡單的return,並在這種情況下改變什麼?也許在執行?還是表現? yield from是否會生成一個新的「外部」迭代器?

我知道,在其他情況下,yield from可以更靈活,因爲我可以多次使用它,甚至可以將它與簡單的yield s混合使用,但這對我的情況無關緊要。

回答

2

當您像上面那樣在方法的末尾使用yield from一次時,這不會改變方法返回的內容。但方法內部的代碼仍然存在差異:迭代開始時迭代迭代器時調用yield from之前的任何代碼,而調用函數時執行return之前的代碼,因爲此函數只是一個正常功能(實際上,這不是yield from的具體情況,這是yield的行爲,見https://3v4l.org/jnPvC)。

yield from的一大優點是您可以在函數中多次使用它,它將所有迭代器的值組合到單個迭代器中。