在Gtk2hs中有Graphics.UI.Gtk.ModelView.CustomStore
模块,其中包含一个包含函数集合的数据类型TreeModelIface
。它包含许多用于在用户定义的树类型中导航的函数,其中位置存储为TreeIter
。因此,其中一个成员函数是:
treeModelIfaceIterNext :: TreeIter -> IO (Maybe TreeIter)
这将返回与下一个兄弟节点关联的TreeIter
(如果有)。很简单。但是以下成员函数是:
treeModelIfaceIterChildren :: Maybe TreeIter -> IO (Maybe TreeIter)
这需要Maybe TreeIter
而不是简单的TreeIter
。文档没有说明为什么,或Nothing
的论点被用于什么。
问题:
为什么参数类型的这种变化?
treeModelIfaceIterChilren iface Nothing
应该返回什么?
答案 0 :(得分:2)
自从我使用TreeModelIface
接口以来已经过了一段时间,但如果我没记错的话,这一切都与树的根(或顶级)节点有关。所以treeModelIfaceIterChilren iface Nothing
用于检索它们,因为它们没有父级。当您使用treeModelIfaceIterNext
迭代兄弟姐妹时,这不是问题。换句话说,要遍历整个树,treeModelIfaceIterChilren iface Nothing
是您的起点,您会连续调用treeModelIfaceIterNext
和treeModelIfaceIterChilren
(Just
值)。