関数ヘッドのマップキーでパターンマッチングを行う方法が見つからないようです。これを行う方法はありますか?私は何をしようとしているが、特定のキーがすでにマップ内に存在するかどうかに応じて異なるコードを実行される(とも避けたかった/ elseと同様であれば)エリクシルの関数頭でマップキーのパターンマッチングを行う方法
これは私のコードは
次のようになりますを使用して、既存の変数に一致させることができます私にマップキーマッチ内部変数キーの**(CompileError)不正使用を、このエラーが発生します
def my_func(key, %{key => _} = map), do: ...
、マップは唯一^キー
キー^もちろん
私もその後、
**(CompileError)を与える
^
def my_func(key, %{^key => _} = map), do: ...
を使用して、それを試してみまし結合していない変数私は万能薬1.3.1を使用しています/ erlang 19.0 x64をWindows 8.1マシンにインストールします。 読んでいただきありがとうございます! IEXで次に
defmodule Test do def my_func(%{"a" => value}), do: {:a, value} def my_func(%{"b" => value}), do: {:b, value} def my_func(_), do: :error end
:あなたが必要とするキーを持つ
こんにちは、お返事ありがとうございます。しかし、私はおそらく、 'my_func(key、_)'のキーが実行時に決定される変数であることを明確にするべきです、コンパイル時には知られていません。 – bottlenecked
OK、今私はあなたが何をしようとしているのかを部分的に理解しています。あなたの機能はまさに何をしていますか? –
Um、関数本体を追加するのは関係ないと思いましたが、終了コードは「キーが既に存在する場合は警告を出し、そうでない場合はfooを実行してマップに追加してください」 – bottlenecked