1

私はフィールドを機能させようとしてきましたが、失敗し続けています。私も例を探してみましたが、Elm 0.13 では利用できない新しい Channel API を使用する Elm 0.14 を使用している例しか見つかりませんでした。

そこで、カタログで提供されている例から始めました

import Graphics.Input.Field (..)
import Graphics.Input (..)

name : Input Content
name = input noContent

nameField : Signal Element
nameField = field defaultStyle name.handle identity "Name" <~ name.signal

そして、私が試したフィールドを使用するために

main : Signal Element
main = Signal.lift2 display Window.dimensions gameState

display : (Int,Int) -> GameState -> Element
display (w,h) g =
    container w h middle <|
        collage gameWidth gameHeight
            (if  | g.state == Menu ->
                    [ rect gameWidth gameHeight
                        |> filled black
                    , toForm nameField
                    , plainText "*The name entered in the nameField*"
                    ]
                | otherwise -> []
            )

しかし、私は次のエラーが発生し続けます

Expected Type: Signal.Signal Graphics.Element.Element
Actual Type: Graphics.Element.Element

要素がシグナルでなくなったのはなぜですか...関数定義は、シグナルを出力する必要があると明確に述べていますよね?変数内で使用できる名前を入力するにはどうすればよいでしょうか。

4

1 に答える 1

1

Elm 0.13 には、煩わしく紛らわしいタイプのエラー メッセージがいくつかありました。通常、期待値と実際値は入れ替わります。この場合、問題は in の使用nameField : Signal Elementに起因しdisplay : (Int,Int) -> GameState -> Elementます。displayは純粋な (非シグナル) 関数ですが、純粋であるためには、その中でシグナルを使用することはできません。これを解決するには、nameField信号を 1 レベル上げますmain。フィールドに入力されたものを使用するには、入力信号を使用します。

main : Signal Element
main = Signal.lift4 display Window.dimensions gameState name.signal

nameField : Content -> Element
nameField = field defaultStyle name.handle identity "Name"

display : (Int,Int) -> GameState -> Content -> Element
display (w,h) g currentContent =
    container w h middle <|
        collage gameWidth gameHeight
            (if  | g.state == Menu ->
                    [ rect gameWidth gameHeight
                        |> filled black
                    , toForm (nameField currentContent) -- use something other than `currentContent` here to influence the field content. 
                    , plainText currentContent.string
                    ]
                | otherwise -> []
            )
于 2014-12-21T18:19:48.290 に答える