2016-06-22 4 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 같은 않습니다.

이 정보가 도움이되기를 바랍니다.