gpt4 book ai didi

functional-programming - 通过点函数更新 Elm-lang 记录中的字段?

转载 作者:行者123 更新时间:2023-12-04 07:20:24 24 4
gpt4 key购买 nike

是否可以通过函数(或其他方式)更新 Elm 记录中的字段而无需明确指定精确的字段名称?

例子:

> fields = { a = 1, b = 2, c = 3 }
> updateField fields newVal fieldToUpdate = { fields | fieldToUpdate <- newVal }
> updateField fields 5 .a -- does not work

更新:

要添加一些上下文,我正在尝试删除以下代码:
UpdatePhraseInput contents ->
let currentInputFields = model.inputFields
in { model | inputFields <- { currentInputFields | phrase <- contents }}

UpdatePointsInput contents ->
let currentInputFields = model.inputFields
in { model | inputFields <- { currentInputFields | points <- contents }}

如果我能调用神话,那就太好了 updateInput像这样的功能:
UpdatePhraseInput contents -> updateInput model contents .phrase
UpdatePointsInput contents -> updateInput model contents .points

最佳答案

滚动你自己的更新功能

是的,尽管可能不如从田野中获得好。但思路是一样的,你写了一个简单地使用记录更新语法的函数:

setPhrase r v = { r | phrase <- v }
setPoints r v = { r | points <- v }
updInputFields r f = { r | inputFields <- f r.inputFields }

然后你可以写:
UpdatePhraseInput contents -> updInputFields model (flip setPhrase contents)
UpdatePointsInput contents -> updInputFields model (flip setPoints contents)
Focus图书馆

合并时 fieldfieldSet ,你会得到类似 Focus 的信息.尽管该库不仅适用于记录,还适用于更多的东西。下面是一个使用 Focus 的例子。 :
phrase = Focus.create .phrase (\upd r -> { r | phrase <- upd r.phrase })
points = Focus.create .points (\upd r -> { r | points <- upd r.points })
inputFields = Focus.create .inputFields (\upd r -> { r | inputFields <- upd r.inputFields})

然后你可以写:
UpdatePhraseInput contents -> Focus.set (inputFields => phrase) contents model
UpdatePointsInput contents -> Focus.set (inputFields => points) contents model

关于functional-programming - 通过点函数更新 Elm-lang 记录中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31770421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com