elixir - 如何在 elixir 中调用 :ets. fun2ms?

标签 elixir ets

是否可以?如果是这样,如何?

以下代码在 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

最佳答案

不,你不能。至少不是像错误所说的“真正的功能”。 Elixir 函数的定义与 Erlang 中的函数略有不同,这就是该函数不起作用的原因。幸运的是,您可以使用此存储库完成相同的操作 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 相同.

我希望这有帮助。

关于elixir - 如何在 elixir 中调用 :ets. fun2ms?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37968208/

相关文章:

data-structures - ETS、persistent_term 和流程字典有什么区别?

macros - 可以用宏获得评论吗?

erlang - ets 可以找到该记录但无法删除它

recursion - 如何以递归方式更改字符串向字符串添加一个数字并将每个数字添加到列表中

elixir - 如何正确重新安装Elixir?

reference - ETS创建返回值

elixir - 如何在不扫描整个表的情况下检索 ets 键列表?

erlang - 如何从 mnesia 备份文件中提取数据

elixir - 如何在链接中指定多个参数

elixir - 为什么我不能在 Elixir 闭包函数头中使用 pin 运算符?