Почему в этом коде так много «конечных» операторов [elixir] - PullRequest
0 голосов
/ 08 мая 2018

Я работаю над книгой Programming Elixir, и в одном из примеров я получил ошибку компиляции, в которой мне не хватало end, поэтому я добавил end, и это сработало ..

Дело в том, что я не могу понять, что это закрывает!

Но это работает! ???

Это странный эликсир? Что происходит?

 defmodule Rumbl.Repo do
 @moduledoc """
 In memory repository
  """

  def all(Rumbl.User) do
    [%Rumbl.User{id: "1", name: "Jose", username: "josevalim", password: "elixir"},
     %Rumbl.User{id: "2", name: "Alison", username: "allygrrl", password: "elixir123"},
     %Rumbl.User{id: "3", name: "Susan", username: "susanQ",password: "elixir321"}]
  end

  def all(_module), do: [] 

  def get(module, id) do
    Enum.find all(module), fn map -> map.id == id end
  end

  def get_by(module, params) do 
    Enum.find all(module), fn map -> 
      Enum.all?(params, fn {key, val} -> Map.get(map, key) == val end)
  end
end
end

1 Ответ

0 голосов
/ 09 мая 2018

Вы не закрыли fn map -> ... в get_by/2 Так должно выглядеть так:

def get_by(module, params) do 
  Enum.find all(module), fn map -> 
    Enum.all?(params, fn {key, val} -> Map.get(map, key) == val end)
  end  # <- end needed here
end
...