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

时间:2016-06-22 12:36:22

标签: elixir ets

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

以下代码在IEX中执行。

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

int main ()
 {
   std::vector<int> foo = {0, 42, 0, 42, 0, 42};
   std::replace(foo.rbegin(), foo.rend(), foo.front(), 13);

   for(const auto & i : foo)
      std::cout << i << '\t';

   std::cout << std::endl;

   return 0;
 }

错误就像这样:我想知道如何正确地打电话。

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

1 个答案:

答案 0 :(得分:5)

不,你不能。至少没有&#34;真正的功能&#34;就像错误说的那样。 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}

Ex2ms.fun/1ets:fun2ms/1的作用相同。

我希望这会有所帮助。