使用在另一个函数中创建的项目将此项目添加到列表中
use item created in another function to add this item to a list
我正在尝试创建一个用户并将这个新用户添加到列表中。
每次创建新用户时,我都想将该新用户添加到现有列表中。
我的代码:
defmodule User do
defstruct [:name, :city, company_code: 500]
def create(params) do
name = Keyword.get(params, :name)
company_code = Keyword.get(params, :company_code)
city = Keyword.get(params, :city)
%Product{name: name, city: city, company_code: company_code}
end
def add_new_user(new_user, %User{}) do
[:new_user | %User{}]
end
end
如何获取 运行 def create
时得到的结果,并在每次使用 def create
创建用户时将其添加到列表中,并向所有用户显示该列表?
Elixir 作为第一语言可能具有挑战性,但它确实迫使您认真思考如何以及在何处传递值。
首先,您的 User
结构看起来像是来自 Product
结构的 copy-pasted,所以让我们简化示例:
defmodule User do
defstruct [:first_name, :last_name]
def create(params) do
first_name = Keyword.get(params, :first_name)
last_name = Keyword.get(params, :last_name)
%User{first_name: first_name, last_name: last_name}
end
def add_user_to_list(new_user, list_of_existing_users \ []) do
[new_user | list_of_existing_users]
end
end
在这里,调用create/1
,例如User.create(first_name: "Bob", last_name: "Smith")
将 return 一个 User
结构,例如%User{first_name: "Bob", last_name: "Smith"}
.
如果要将其添加到列表中,可以将结构传递给 add_user_to_list/2
函数:
[%User{first_name: "Bob", last_name: "Smith"}] = User.add_user_to_list(%User{first_name: "Bob", last_name: "Smith"})
问题在于,如果您想添加其他用户,则必须跟踪 UPDATED 列表变量并将该 BACK IN 传递给 add_user_to_list/2
函数。例如
user_list = []
u1 = User.create(first_name: "Bob", last_name: "Smith")
user_list = User.add_user_to_list(u1, user_list)
u2 = User.create(first_name: "Jane", last_name: "Doe")
user_list = User.add_user_to_list(u2, user_list)
# ... etc...
我正在尝试创建一个用户并将这个新用户添加到列表中。
每次创建新用户时,我都想将该新用户添加到现有列表中。
我的代码:
defmodule User do
defstruct [:name, :city, company_code: 500]
def create(params) do
name = Keyword.get(params, :name)
company_code = Keyword.get(params, :company_code)
city = Keyword.get(params, :city)
%Product{name: name, city: city, company_code: company_code}
end
def add_new_user(new_user, %User{}) do
[:new_user | %User{}]
end
end
如何获取 运行 def create
时得到的结果,并在每次使用 def create
创建用户时将其添加到列表中,并向所有用户显示该列表?
Elixir 作为第一语言可能具有挑战性,但它确实迫使您认真思考如何以及在何处传递值。
首先,您的 User
结构看起来像是来自 Product
结构的 copy-pasted,所以让我们简化示例:
defmodule User do
defstruct [:first_name, :last_name]
def create(params) do
first_name = Keyword.get(params, :first_name)
last_name = Keyword.get(params, :last_name)
%User{first_name: first_name, last_name: last_name}
end
def add_user_to_list(new_user, list_of_existing_users \ []) do
[new_user | list_of_existing_users]
end
end
在这里,调用create/1
,例如User.create(first_name: "Bob", last_name: "Smith")
将 return 一个 User
结构,例如%User{first_name: "Bob", last_name: "Smith"}
.
如果要将其添加到列表中,可以将结构传递给 add_user_to_list/2
函数:
[%User{first_name: "Bob", last_name: "Smith"}] = User.add_user_to_list(%User{first_name: "Bob", last_name: "Smith"})
问题在于,如果您想添加其他用户,则必须跟踪 UPDATED 列表变量并将该 BACK IN 传递给 add_user_to_list/2
函数。例如
user_list = []
u1 = User.create(first_name: "Bob", last_name: "Smith")
user_list = User.add_user_to_list(u1, user_list)
u2 = User.create(first_name: "Jane", last_name: "Doe")
user_list = User.add_user_to_list(u2, user_list)
# ... etc...