, şu ben yanlış yaptığına emin değilim hatası ... Aşağıdaki hataİksir hatası "erlang hata: guard_expr" <code>iex</code> konsolunda
case %{} do
x when x == %{} -> true
_x -> false
end
Sonuçlar bulundu:
Ayrıca, bunu nasıl bulduğumu açıklamak istedim. Elixir'in uygulamasına bakarak ve []
, {}
ve %{}
'unve nil
ile aynı olması için değiştirerek kendi ||
makromumu kendim yapmaya çalıştım.
defmodule Or do
defmacro left || right do
quote do
case unquote(left) do
x when x in [false, nil] or x == [] or x == {} or x == %{} ->
unquote(right)
x ->
x
end
end
end
end
or x == %{}
işlerin yapar uzağa alınması: https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/kernel.ex#L2313
İşte o uygulama (aynı sorun var) var.
Garip. Değişken derlemeler yerine bir değişken kullanmak, yani: 'y =% {}; case y, do: (x x == y olduğunda -> true; _x -> false) ' – Christian
Evet ve yalnızca bir soruna neden olan haritalar, [] veya başka bir şey çökmesine neden olmaz. – mgwidmann
Strangely, bu aynı bekçi bir işlev tanımında kullanıldığında, çökmez ... – mgwidmann