0

有人可以逐行解释这段代码的作用吗?

如何准确理解声明的第一行?这是什么意思:[道具(网格())]?

感谢帮助

gridCtrl :: Window a -> [Prop (Grid ())] -> IO (Grid ())
gridCtrl parent props
  = feed2 props 0 $
    initialWindow $ \id rect -> \props flags ->
    do g <- gridCreate parent id rect flags
       gridCreateGrid g 0 0 0
       set g props
       return g
4

1 回答 1

4

在 wxHaskell 中,控件具有可以读取或更改的附加属性。节 [Prop (Grid ())] 可以理解为“任何 Grid 类型的属性列表”。

这是 wxHaskell 处理它所构建的 wxWidgets 库是面向对象的事实的方式。Grid() 实际上表示“继承层次结构中 Grid 派生的任何东西” - 即 Grid、ScrolledWindow、Panel、Window、EvtHandler、wxObject(如果您从http://wxhaskell.sourceforge.net/ doc/Graphics-UI-WXCore-WxcClassTypes.html#204

当您查看控件(例如 ListCtrl)的文档时,您会发现它被报告为具有一组属性和实例。基本上,您可以使用适用于 Grid 层次结构的那些。例如,Grid 派生自 ScrolledWindow,因此您可以使用:

  • 属性滚动率
  • Colored 类的属性,例如 bgcolor、color
  • 等等

您可以按如下方式使用这些属性,例如

g <- gridCtrl parent [color := red, bgcolor := green, scrollRate := 41]
...
set g [color := blue]

逐行,代码如下所示:

  • 使用提供的属性(props
  • 和一个initialWindow(将填写窗口id和初始rectflags),按顺序调用流动的包装函数:
  • gridCreate创建一个新的 Grid 实例
  • 使用新的网格实例,将网格设置为 0 行、0 列且未选择任何内容。
  • 将调用者提供的属性 ( props ) 应用到网格中(例如,将数据放入、设置样式等)

使代码最难阅读的部分是feed2函数,而且代码是用 '$' 样式编写的,以便为 feed2 提供正确的参数。我上面稍微挥手的解释应该就够了,但是如果你想了解细节,了解feed2只是组成倒置的函数应用程序

feed2 x y f = f x y

然后用括号替换“$”应用程序。这看起来不那么可爱,但更容易阅读。

gridCtrl parent props =
  feed2 props 0
    (initialWindow (\id rect ->
                      \props flags ->
                        do
                        g <- gridCreate parent id rect flags
                        gridCreateGrid g 0 0 0
                        set g props
                        return g )))
于 2010-05-24T12:46:38.843 回答