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っぽいですね。