2016-09-03 5 views
2

Gtk2hsでは、Graphics.UI.Gtk.ModelView.CustomStoreモジュールがあり、関数の集まりを含むデータ型が含まれています。TreeModelIface。場所にはTreeIterという名前が格納されているユーザー定義のツリー型を操作するための一連の関数が含まれています。そうメンバ関数の一つである:一つは存在する場合Gtk2hsでは、TreeModelIface関数がIterをとることがあるのはなぜですか?Iter

treeModelIfaceIterNext :: TreeIter -> IO (Maybe TreeIter) 

これは、次の兄弟ノードに関連付けられTreeIterを返します。十分に簡単です。しかし、以下のメンバ関数は次のとおりです。

treeModelIfaceIterChildren :: Maybe TreeIter -> IO (Maybe TreeIter) 

これは代わりに、単純なTreeIterMaybe TreeIterをとります。ドキュメンテーションは、理由、またはNothingの引数が何のために使用されているかについては言及していません。

質問:引数の型の

  1. なぜ、この変化?

  2. treeModelIfaceIterChilren iface Nothingは何を返しますか?

答えて

2

私はTreeModelIfaceインターフェイスを使用するのでそれはいつかをされているが、私の記憶が正しければ、それはすべてのルート(またはトップレベル)ツリーのノードに関係しています。したがって、親を持たないので、treeModelIfaceIterChilren iface Nothingが検索に使用されます。これは、あなたがtreeModelIfaceIterNextで兄弟の反復処理をしているときは問題になりません。つまり、ツリー全体をトラバースするには、treeModelIfaceIterChilren iface Nothingを始点とし、treeModelIfaceIterNexttreeModelIfaceIterChilrenJustの値)を連続して呼び出します。

関連する問題