gpt4 book ai didi

elixir - 如何使用变量中的键更新Elixir结构

转载 作者:行者123 更新时间:2023-12-02 08:00:45 25 4
gpt4 key购买 nike

我有一些结构定义

defmodule Foo do
defstruct [:a, :b]
end

我有一些结构
a = %Foo{a: 1, b: 2}

我可以使用管道获取新结构(如 map )
%Foo{a | b: 3}
%Foo{a: 1, b: 3}

但是与map不同,当变量中的键输入时,我无法获得新的结构:
iex(4)> key = :b
:b
iex(5)> %Foo{a | key => 3}
** (CompileError) iex:5: unknown key key for struct Foo

问题:当我有变量更新键时如何获取新结构?

最佳答案

结构提供编译时检查,以确保数据键被限制为您指定的值。因此,无法使用具有结构语义的动态键,因为该键的值仅在运行时才知道。

您可以更新数据,但必须使用映射语义并放弃编译时检查:

%{foo | key => "bar"}

要么

Map.replace!(foo, key, "bar")

如果 key无效,则会给您一个运行时错误。

这就是为什么在使用结构时,如果可能的话,最好在编译时使用结构语义指定键。

关于elixir - 如何使用变量中的键更新Elixir结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616659/

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