如何调用:elix中的ets.fun2ms?

apo*_*sto 3 elixir ets

可能吗?如果是这样,怎么样?

以下代码在IEX中执行.

但是,编译的代码会生成运行时错误.

 :ets.fun2ms(fn({a,b}) -> a and b end)
Run Code Online (Sandbox Code Playgroud)

错误就像这样:我想知道如何正确调用.

** (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
Run Code Online (Sandbox Code Playgroud)

Ale*_*usa 5

不,你不能.至少没有像错误所说的那样"真正的功能".Elixir函数的定义与Erlang中的函数略有不同,这就是为什么这个函数不起作用的原因.幸运的是,您可以使用此存储库https://github.com/ericmj/ex2ms完成相同的操作

正如README中所述:

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}
Run Code Online (Sandbox Code Playgroud)

Ex2ms.fun/1做的也一样ets:fun2ms/1.

我希望这有帮助.