2016-06-22 9 views
3

可能ですか?もしそうなら、どうですか?お電話する方法:ets.fun2ms in elixir?

次のコードはIEXで実行されます。

ただし、コンパイルされたコードは実行時エラーを生成します。

:ets.fun2ms(fn({a,b}) -> a and b end) 

エラーが次のように表示されます。適切に呼び出す方法を知りたい。

** (exit) exited in: :ets.fun2ms(:function, :called, :with, :real, :fun, :should, :be, :transformed, :with, :parse_transform, :or, :called, :with, :a, :fun, :generated, :in, :the, :shell) 
    ** (EXIT) :badarg 
stacktrace: 
    (stdlib) ets.erl:554: :ets.fun2ms/1 
    test/game/ets_lookup_test.exs:27 
+0

あなたは起こりそうにないと思われることは何ですか? – Taegost

答えて

3

いいえ、できません。少なくとも、エラーのような "実際の関数"はないと言います。エリクール関数はErlangの関数とは少し違って定義されているので、この関数は機能しません。幸いなことに、あなたはそれがREADMEに記載されているように、このリポジトリhttps://github.com/ericmj/ex2ms

を使用して同じことを達成することができます

iex(1)> import Ex2ms 
iex(2)> fun do { x, y } = z when x > 10 -> z end 
[{{:"$1",:"$2"},[{:>,:"$1",10}],[:"$_"]}] 
iex(3)> :ets.test_ms({ 42, 43 }, v(2)) 
{:ok,{42,43}} 
iex(4)> :ets.test_ms({ 0, 10 }, v(2)) 
{:ok,false} 

マクロEx2ms.fun/1ets:fun2ms/1と同じこと。

こちらがお役に立てば幸いです。

関連する問題