Generator 函式其實就跟 C# 的 Iterator 一樣,利用 yield 關鍵字先把值傳回讓呼叫者使用。
使用 Generator/Iterator 最大的好處是可以讓函式只做必要的邏輯,而不需要把一些事情綁在迴圈裡面。
下面就是一個很標準的尋訪目錄樹的範例,尋訪的工作交給 walk,主程式則負責依據傳回的值作處理。
import System import System.IO def walk( path as string ): di = DirectoryInfo( path ) for d in di.GetDirectories(): yield d as FileSystemInfo for f in di.GetFiles(): yield f as FileSystemInfo for node in walk( "." ): if node isa DirectoryInfo: print "[${node.Name}]" elif node isa FileInfo: print node.Name
參考自:Generators
p.s. 這系列文章一定會持續寫到 macro 出現為止。