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 ())] は、「任意のグリッド タイプのプロパティのリスト」として理解できます。

これは、wxHaskell が構築している wxWidgets ライブラリがオブジェクト指向であるという事実に対処する wxHaskell の方法です。Grid () は、実際には「Grid が派生する継承階層内のすべて」を意味します。つまり、Grid、ScrolledWindow、Panel、Window、EvtHandler、wxObject ( http://wxhaskell.sourceforge.net/から開始すると、これをたどることができます)。 doc/Graphics-UI-WXCore-WxcClassTypes.html#204 )

コントロール (ListCtrl など) のドキュメントを見ると、一連の属性とインスタンスがあると報告されていることがわかります。基本的に、Grid の階層に該当するものを使用できます。たとえば、Grid は ScrolledWindow から派生するため、次を使用できます。

  • 属性 scrollRate
  • Colored クラスの属性 (bgcolor、color など)

これらのプロパティは次のように使用します。

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

行ごとに、コードは次のようになります。

  • 提供されたプロパティ ( props )の使用
  • およびinitialWindow (ウィンドウIDと初期のrectおよびflagsを入力します) は、次のようにラップされた関数を順番に呼び出します。
  • 新しい Grid インスタンスを作成するためのgridCreate
  • 新しいグリッド インスタンスを使用して、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 に答える