Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 用自定义值替换结构中的特定值_Elixir - Fatal编程技术网

Elixir 用自定义值替换结构中的特定值

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

我从数据库返回了不同的结构,我想用一些自定义值替换值exto.Assoication.Notloaded,比如它们中的Notloaded

这是一个记录

 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)