को लागू करने का सही तरीका क्या है मेरे मॉडल को लेने और एक टूस्ट्रिंग फ़ंक्शन को लागू करने का सही तरीका क्या है?एल्म में अपने स्वयं के टूस्ट्रिंग
मैं जिस प्रकार की तलाश कर रहा हूं वह toString : Model -> String
होगा, मैं toStr : Model -> String
के प्रकार के साथ एक समान कार्य करने में सक्षम हूं लेकिन मुझे लगता है कि मैं चाहता हूं कि फ़ंक्शन को toString
कहा जाए।
उदाहरण कार्यक्रम (सिक्का परिवर्तक काता):
module CoinChanger where
import Html exposing (..)
import StartApp.Simple as StartApp
import Signal exposing (Address)
import Html.Attributes exposing (..)
import Html.Events exposing (on, targetValue)
import String
---- MAIN ----
main =
StartApp.start
{
model = emptyModel
,update = update
,view = view
}
---- Model ----
type alias Model =
{
change : List Int
}
emptyModel : Model
emptyModel =
{
change = []
}
---- VIEW ----
toStr : Model -> String
toStr model =
model.change
|> List.map (\coin -> (toString coin) ++ "¢")
|> String.join ", "
view : Address String -> Model -> Html
view address model =
div []
[
input
[
placeholder "amount to make change for"
, on "input" targetValue (Signal.message address)
, autofocus True
-- style
]
[]
, div []
[
text (toStr model)
]
]
---- UPDATE ----
changeFor : Int -> List Int
changeFor amount =
[ 25, 10, 5, 1 ]
|> List.foldl
(\coin (change, amount)
-> (change ++ List.repeat (amount // coin) coin
, amount % coin)
)
([], amount)
|> fst
update : String -> Model -> Model
update change model =
{ model | change =
case String.toInt change of
Ok amount
-> changeFor amount
Err msg
-> []
}
मैं यह करने के समारोह toString
कॉल करने के लिए किया जाएगा सही तरीका लगता है, लेकिन है कि मुझे संकलक से निम्न त्रुटि देता है:
1 मॉड्यूल में त्रुटियों की पहचान की गई। - प्रकार मिस्मैच --------------------------------------------- - CoinChanger.elm
toString
के लिए प्रकार एनोटेशन इसकी परिभाषा से मेल नहीं खाता है।42│ toString: मॉडल -> स्ट्रिंग ^^^^^^^^^^^^^^^ प्रकार एनोटेशन कह रहा है:
{ change : List Int } -> String
लेकिन मैं परिभाषा यह है कि निष्कर्ष निकालते हूँ प्रकार:
{ change : List { change : List Int } } -> String
toStr
(या कुछ और toString
नहीं बुलाया) करने के लिए समारोह का नाम बदलने पर समस्या ठीक होती है लेकिन गलत लगता है। ऐसा करने का सही तरीका क्या है?
को हटाने के लिए का उपयोग करें, मैंने लाइन 45 को '|> List.map (\ coin -> (Basics.toString coin) ++ "¢") बदल दिया है और सब कुछ आपके जैसा काम करता है । धन्यवाद! –