Elixir 用自定义值替换结构中的特定值
我从数据库返回了不同的结构,我想用一些自定义值替换值exto.Assoication.Notloaded,比如它们中的Notloaded 这是一个记录Elixir 用自定义值替换结构中的特定值,elixir,Elixir,我从数据库返回了不同的结构,我想用一些自定义值替换值exto.Assoication.Notloaded,比如它们中的Notloaded 这是一个记录 unit = %{ __meta__: #Ecto.Schema.Metadata<:loaded, "units">, cdc_location_class_id: nil, description: "", facility: #Ecto.Association.NotLoaded<association
unit = %{
__meta__: #Ecto.Schema.Metadata<:loaded, "units">,
cdc_location_class_id: nil,
description: "",
facility: #Ecto.Association.NotLoaded<association :facility is not loaded>,
facility_id: 2215,
id: 719,
is_active: true,
name: "Unit",
rooms: #Ecto.Association.NotLoaded<association :rooms is not loaded>
}
这是我想要的地图
unit = %{
__meta__: #Ecto.Schema.Metadata<:loaded, "units">,
cdc_location_class_id: nil,
description: "",
facility: "not loaded">,
facility_id: 2215,
id: 719,
is_active: true,
name: "Unit",
rooms: "not loaded"
}
有什么建议吗
谢谢
由于结构只是映射,因此它们与映射模块中的函数一起工作
因此,可以使用Map.put替换该值。以下是一个例子:
defmodule Test do
defmodule User do
defstruct name: "John", age: 27
end
def test() do
a = %User{}
IO.inspect a
a = Map.put(a, :name, "change")
IO.inspect a
end
end
Test.test()
您可以尝试以下方法: 我将在value参数上使用:maps.map/2,pattern match,并根据需要替换它:
new_unit =
:maps.map(fn
_, %Ecto.Association.NotLoaded{} -> "not loaded"
_, value -> value
end, unit)
如果您需要在映射列表上运行此操作,只需将上述操作放入函数并使用Enum.map/2即可。我的建议是不要这样做:如果您需要这样做,您可能做错了。您还可以使用标准Enum.map函数而不是:maps.map,不是吗?但我想您必须在中添加另一个枚举
new_unit =
:maps.map(fn
_, %Ecto.Association.NotLoaded{} -> "not loaded"
_, value -> value
end, unit)