2017-04-07 11 views
0

그래서 나는 이제 다음과 같이 내 모듈이 정의 가정 해 봅시다 비약의 모듈에 대한 속성을 정의 할 때 구문 내 경우에는, 그러나 @myvariable 30 것을 이해 CompileError: undefined function add/2Elixir의 속성에 중요한 값을 저장하려면 어떻게해야합니까? 그러나 나는를 얻을</p> <pre><code>defmodule MyModule do def add(x,y), do: x + y @myvariable add(3,4) def print, do: @myvariable end </code></pre> <p>이 이상적이 7를 인쇄해야합니다

내 구체적인 경우 속성으로 저장하려는 값은 약간 큰지도이므로 add(3,4)처럼 사소하지는 않지만 동일한 개념이 적용된다는 것은 확실합니다. 속성이이 문제를 해결하는 올바른 방법이 아니라면, 실제 "연금술 (elixir)"방법에 대해 알려주십시오.

필자의 경우 전체 맵을 각 함수의 매개 변수로 전달하지 않고 내 모듈에서 내 맵의 특정 키에 액세스 할 수 있기를 원합니다.

감사합니다!

답변

1

@values은 변수가 아니며, Module Attributes입니다. 모듈은 기본적으로 모듈에 저장되지 않으며 값은 컴파일 타임에만 존재합니다. 엘릭서 'Getting Started' Guide에서 :

  1. 그들은 정보를 수시로 모듈을 주석하는 역할은 사용자 또는 VM에서 사용되는 : 모듈 비약 속성

    는 세 가지 목적을 제공합니다.

  2. 그들은 상수로 작동합니다.
  3. 이들은 컴파일하는 동안 사용할 임시 모듈 저장소로 작동합니다.

코드의 문제는 @myvariableMyModule의 컴파일시 설정되는하지만 모듈이 아직 컴파일되지 않았기 때문에 add(3, 4) 계산할 수 없다는 것입니다.

가장 간단한 해결책은 다른 모듈에 add(x, y)을 정의하고 거기에서 호출하는 것입니다

defmodule OtherModule do 
    def add(x, y), do: x + y 
end 

defmodule MyModule do 
    @myvariable OtherModule.add(3, 4) 
    def print, do: @myvariable 
end 

당신은 similarly define your Map as a Module attribute을 할 수 있지만, 컴파일 후 그래서 당신은 할 수 일정하지 않을 것입니다 될 것입니다 그것을 수정 (나는 당신이 원하는 것 같아요).

+0

감사합니다. @Sheharyar. 이제 작동합니다! –

관련 문제