有人可以解释一下这行代码的作用吗?
如何理解第一行的声明? 这是什么意思:[Prop(Grid())]?
感谢您的帮助
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
答案 0 :(得分:4)
在wxHaskell中,控件具有可以读取或更改的附加属性。节[Prop(Grid())]可以理解为“任何网格类型的属性列表”。
这是wxHaskell处理这样一个事实的方式,它构建于的wxWidgets库是面向对象的。 Grid()实际上意味着“Grid派生的继承层次结构中的任何东西” - 即Grid,ScrolledWindow,Panel,Window,EvtHandler,wxObject(如果从http://wxhaskell.sourceforge.net/doc/Graphics-UI-WXCore-WxcClassTypes.html#204开始,你可以遵循这一点)
当您查看Control的文档(例如ListCtrl)时,您会发现它被报告为具有一组属性和实例。基本上,您可以使用适用于Grid的层次结构的那些。例如,Grid派生自ScrolledWindow,因此您可以使用:
您可以按如下方式使用这些属性,例如
g <- gridCtrl parent [color := red, bgcolor := green, scrollRate := 41]
...
set g [color := blue]
逐行,代码如下所示:
使代码最难阅读的部分是 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 )))