気まぐれ日記より.
tree.hh: an STL-like C++ tree class
これは便利そうです.STL互換な所が最高.
最近はツールを書く機会がめっきりと減ってしまい,書くコードと言えば小さなシェーダとかスクリプトばかりですが,いつか試してみたいと思います.
(…と言いつつ棚上げされている物が沢山ある気がする…)
気まぐれ日記より.
tree.hh: an STL-like C++ tree class
これは便利そうです.STL互換な所が最高.
最近はツールを書く機会がめっきりと減ってしまい,書くコードと言えば小さなシェーダとかスクリプトばかりですが,いつか試してみたいと思います.
(…と言いつつ棚上げされている物が沢山ある気がする…)
“closure(クロージャ)”という概念を最近知りました.
なるほど,スコープの実行環境(スタックフレーム?)に関数内からアクセスできるような仕組みの事なのですね.
勉強の為に読んだウェブサイトの多くには,C/C++にはクロージャが無いと書かれていました.
状態を保持できる関数という意味では,関数オブジェクトやクラスと同じなのではないかと思いますが,大きな違いはそれが無名であるという事,動的に適応できるという点なのだと思います.
なかなか興味深い仕組みだとは思いますが,まだきちんと理解していないせいか,実践的な場面が思い浮かびません.
Pythonなんかだと出来そうですから,日常使うような処理の中で見つかると良いんですが.
早速やってみたのですが,ハマりました.
どうも腑に落ちないので,ちょっと書いてみようと思います.
次のようなXMLファイルがあるとします.
<elem1> <elem2> </elem2> </elem1>
このファイルを二つコピーして,test1.xml,test2.xmlとします.中身は全く同じ物です.
これを以下のようにしてparseすると,test1.xmlは平気なんですが,test2.xmlの処理中にエラーが出てしまいます.
files = ['test1.xml', 'test2.xml']
psr = xml.parsers.expat.ParserCreate()
for f in files:
file = open(f, 'r')
psr.ParseFile(file)
file.close()
ところが,以下だと平気なんです.
files = ['test1.xml', 'test2.xml']
for f in files:
psr = xml.parsers.expat.ParserCreate()
file = open(f, 'r')
psr.ParseFile(file)
file.close()
どうも納得行かないので,PerlのXML::Parserで同じXMLファイルをforeach内で読ませてみた所,エラーは出ませんでした.
parserオブジェクトを毎回作るなんてやりたくないんですけど,使い方が間違っているのでしょうか?それとも単にモジュールのバグなんでしょうか?