是否可以有一个在现有结构中设置值的函数? 我正在谈论将现有结构传递到函数中并设置该结构“名称”值(例如)的想法?
我有:
main.exs
Code.require_file("user.exs") # Requiring in module
person1 = User.constructor("Name") # Making a new user
IO.write inspect person1
用户.exs
defmodule User do
defstruct [name: ""]
def constructor(name) do
%User{name: name}
end
end
有什么方法可以让这个想法发挥作用吗?
def setName(struct, newName) do
struct.name = newName
end
谢谢
当然。有多种方法可以实现这一点。
当尝试设置结构中缺少的字段时,这将在编译时出错
defmodule User do
defstruct name: nil
def set_name(user, name) do
%{user | name: name}
end
end
这将默默地丢弃无效的密钥
def set_name(user, name) do
user |> struct(%{name: name})
end
这会将无效的键输入到结构中
def set_name(user, name) do
user |> Map.put(:name, name)
end
当尝试设置不在结构中的字段时,这些会引发运行时错误
def set_name(user, name) do
user |> struct!(%{name: name})
end
def set_name(user, name) do
user |> Map.update!(:name, name)
end