【发布时间】:2017-09-21 19:08:50
【问题描述】:
我的 Elm 应用程序中的模型有一些嵌套记录。我目前正在使用正常的不可变函数设置它们。
Types.elm
type alias Model =
{ settings : Settings
...
}
type alias Settings =
{ username : String
, password : String
...
}
App.elm
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
SetUsername username ->
( model |> setUserName username, Cmd.none )
SetPassword password ->
( model |> setPassword password, Cmd.none )
Setters.elm
setUserName : String -> Model -> Model
setUserName username model =
let
oldUserSettings =
model.userSettings
newUserSettings =
{ oldUserSettings | username = username }
in
{ model | userSettings = newUserSettings }
setPassword : String -> Model -> Model
setPassword password model =
let
oldUserSettings =
model.userSettings
newUserSettings =
{ oldUserSettings | password = password }
in
{ model | userSettings = newUserSettings }
我想概括一下 Setter,以便我可以动态设置它们。像这样的:
setUserSettings : String -> String -> Model
setUserSettings field variable model =
let
oldUserSettings =
model.userSettings
newUserSettings =
{ oldUserSettings | field = variable }
in
{ model | userSettings = newUserSettings }
setUserName : String -> Model -> Model
setUserName value model =
setUserSettings username value
setPassword : String -> Model -> Model
setPassword value model =
setUserSettings password value
最像榆树的方法是什么?
【问题讨论】:
-
目前,无法像为 getter 一样创建 setter 函数(例如
.myField)。请参阅此讨论:github.com/elm-lang/elm-compiler/issues/984
标签: immutability elm dynamic-variables