Closureのサンプル
import System.IO import Boo.IO def scanner(dir, glob, func as callable): for dname in Directory.GetDirectories(dir): scanner(dname, glob, func) for fname in Directory.GetFiles(dir, glob): for line in TextFile(fname): func(line) def Main(args as (string)): if len(args) < 2: print "usage: grep.boo pattern glob" else: // 引数から最初の2つを取得 pattern, glob = args // カレントからディレクトリ走査してpatternにマッチした行を表示 scanner(".", glob, {line as string | print (line) if line =~ pattern})
ディレクトリを走査してglobとマッチしたファイルをpatternでgrepする例です。
{line as string | print (line) if line =~ pattern}
この{...}で括っている箇所がClosureです。ブロック内からpattern変数にアクセスしているところに注目です。あと、引数をとる場合は|で仕切った左側に記述します。なんかRubyっぽいですね。