Эликсир: связывает несколько переменных в условиях - PullRequest
0 голосов
/ 31 марта 2020

В случае назначения переменных в условиях:

color = ""
unit = ""
case name do
  "Apple" ->
    color = "Red"
    unit = "kg"
  "Pear" ->
    color = "Green"
    unit = "each"
  _ ->
    color = "black"
    unit = "each"
end

%{name: name, color: color, unit: unit}

В приведенном выше коде необходимо указать переменную перед. Я не думаю, что это хороший код и идеи?

Ответ можно использовать if / else для true / false, или использовать case для нескольких условий.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы также можете сделать это с несколькими функциональными предложениями:

defmodule Example do
  def color("Apple" = name), do: as_map(name, "Red", "kg")
  def color("Pear" = name), do: as_map(name, "Green", "each")
  def color(name), do: as_map(name, "black", "kg")

  def as_map(name, color, unit), do: %{name: name, color: color, unit: unit}
end

Использование:

iex(1)> Example.color("Apple")
%{color: "Red", name: "Apple", unit: "kg"}
iex(2)> Example.color("Pear")
%{color: "Green", name: "Pear", unit: "each"}
iex(3)> Example.color("Orange")
%{color: "black", name: "Orange", unit: "kg"}
1 голос
/ 31 марта 2020

Вы можете попробовать этот код:

{color, unit} = case name do
  "Apple" -> {"Red", "kg"}
  "Pear"  -> {"Green", "each"}
  _       -> {"black", "each"}
end

Было бы больше идиоматических c

...