在Gtk2hs中,为什么TreeModelIface函数有时会使用Iter,有时候是Iter

时间:2016-09-03 12:34:52

标签: haskell gtk2hs

在Gtk2hs中有Graphics.UI.Gtk.ModelView.CustomStore模块,其中包含一个包含函数集合的数据类型TreeModelIface。它包含许多用于在用户定义的树类型中导航的函数,其中位置存储为TreeIter。因此,其中一个成员函数是:

treeModelIfaceIterNext :: TreeIter -> IO (Maybe TreeIter)

这将返回与下一个兄弟节点关联的TreeIter(如果有)。很简单。但是以下成员函数是:

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

这需要Maybe TreeIter而不是简单的TreeIter。文档没有说明为什么,或Nothing的论点被用于什么。

问题:

  1. 为什么参数类型的这种变化?

  2. treeModelIfaceIterChilren iface Nothing应该返回什么?

1 个答案:

答案 0 :(得分:2)

自从我使用TreeModelIface接口以来已经过了一段时间,但如果我没记错的话,这一切都与树的根(或顶级)节点有关。所以treeModelIfaceIterChilren iface Nothing用于检索它们,因为它们没有父级。当您使用treeModelIfaceIterNext迭代兄弟姐妹时,这不是问题。换句话说,要遍历整个树,treeModelIfaceIterChilren iface Nothing是您的起点,您会连续调用treeModelIfaceIterNexttreeModelIfaceIterChilrenJust值)。