【问题标题】:use item created in another function to add this item to a list使用在另一个函数中创建的项目将此项目添加到列表中
【发布时间】:2022-02-18 09:23:16
【问题描述】:

我正在尝试创建一个用户并将这个新用户添加到列表中。

每次创建新用户时,我都想将该新用户添加到现有列表中。

我的代码:

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


【解决方案1】:

Elixir 作为第一门语言可能具有挑战性,但它确实会迫使您认真思考如何以及在何处传递值。

首先,您的 User 结构似乎是从 Product 结构复制粘贴的,所以让我们简化示例:

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") 将返回一个 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...

【讨论】:

  • 非常感谢@Everett!你的解释对我帮助很大!
猜你喜欢
  • 2011-06-21
  • 1970-01-01
  • 2021-12-22
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
相关资源
最近更新 更多