2017-12-01 5 views
1

에 수입 된 기능의 내가이비약 이름 바꾸기 별칭

defmodule Test do 
    alias Module.Utils 

    test "test 1" do 
    Utils.some_function?(...) 
    end 

    test "test 2" do 
    Utils.some_function?(...) 
    end 
end 

내가 리팩토링 또는 같은 무언가로 그 기능을 단순화 할 수처럼의 Utils 모듈에 속하는 기능을 시험하고 있다고 가정 해 봅시다 모듈 이름을 작성하고 함수 이름을 단순화해야합니다.

답변

4

가져 오는 동안 함수의 이름을 바꿀 수 없습니다.

당신은이 같은 다른 모듈의 함수를 호출 로컬 함수 만들 defdelegate을 사용할 수 있습니다 : 당신은뿐만 아니라 단지 대신이 작업을 수행 할 수도 있지만

defmodule A do 
    def just_add_these_two_numbers(a, b), do: a + b 
end 

defmodule B do 
    defdelegate add(a, b), to: A, as: :just_add_these_two_numbers 
    # `add/2` is now the same as `A.just_add_these_two_numbers/2`. 

    def test do 
    IO.inspect add(1, 2) == 3 
    end 
end 

B.test #=> true 

가 (그것도 짧은입니다) :

def add(a, b), do: A.just_add_these_two_numbers(a, b) 
+0

안녕하세요 , 매개 변수 a가 항상 동일하다는 것을 알고 있다면, defdelegate 내에 정의 할 수 있고 나머지 테스트에서 다른 매개 변수 "b"를 추가 할 수 있습니까? – lapinkoira

+0

아니, 'defdelegate'는 이것을 허용하지 않습니다. 그랬더라도 def add5 (b)를 수행하는 것이 훨씬 더 짧을 것입니다 : A.just_add_these_two_numbers (5, b)'를 사용하십시오. 이런 식으로'defp'를 실행하여 새로운 함수를 비공개로 만들 수 있습니다. – Dogbert

+0

감사합니다. 그리고 def 5 (5, b)를 def add (a, b) 전에 줄 변수로 선언 할 수 있습니까? A.just_add_these_two_numbers (a, b)? 또는 add 메소드의 내부 범위가 표시되지 않습니까? – lapinkoira