2016-09-03 36 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) 

这需要Maybe TreeIter,而不是一个简单的TreeIter。该文档没有说明为什么,或者Nothing用于什么参数。

问题:

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

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

回答

2

它已经一段时间,因为我用的TreeModelIface接口,但如果我没记错的话,这一切都与根(或顶层)树的节点即可。所以treeModelIfaceIterChilren iface Nothing是用来检索他们,因为他们没有父母。当你用treeModelIfaceIterNext迭代兄弟姐妹时,这不是问题。换句话说,要遍历整个树,treeModelIfaceIterChilren iface Nothing是您的出发点,并且您连续呼叫treeModelIfaceIterNexttreeModelIfaceIterChilren(具有Just的值)。

相关问题