たとえばクロージャを多用する Ruby のような言語だと、以下のように書く File.open(..) do |file| doHoge do file.puts(msg) end end Ruby ではクロージャをブロックと呼ぶけど、ブロック実行中に例外が発生しても ファイルは確実にクローズされるし、ユーザ定義メソッドでも同様な振る舞いを実装できる
>>148 それに対して、クロージャを持たない手続き型言語の Pascal や Python といった言語では、 同じ事をするのに(>>148 のような) with 構文を使わなければ書けない クロージャは一級市民だから引数で渡したり呼び出すことができるという自由があるけど、 with 構文はあくまで文(statement)だからクロージャと比較すれば表現力は制限される いわばクロージャという概念を持たない言語の代用品が with 構文である
なおJavaScript はクロージャと with 構文のどちらも持っているけど、 書籍 "JavaScript: Good Parts" だとクロージャは Good Parts に with 構文は Bad Parts に分類されている