2017-10-03 4 views
0

명명 된 함수 대신 Elixir에서 익명 함수를 사용하는 경우? 나는 익명 함수를 사용하여이 경우엘릭서에서 익명 기능을 사용할시기는?

handle_open = fn 
{:ok, :done} -> "OK" 
{:error, _} -> "Error:" 
end 
handle_open.(ExAws.S3.download_file("#{Application.get_env(:ex_aws, :s3)[:bucket_s3]}", "foo.jpg", "../../public") |> ExAws.request); 

:

예를 들어 나는이 조각을 가지고있다. 명명 된 함수를 사용하여 동일한 결과 (멀티 바디 포함)를 어떻게 가질 수 있습니까?

이 경우 익명 또는 명명 된 함수를 사용하는 것이 더 정확합니까?

+1

익명 함수 또는 명명 된 함수를 사용하는 경우의 대답은 새 함수에 약간의 코드를 추출 할 때와 같습니다. 왜 추출합니까? 당신이 그것을 재사용하기를 원하기 때문입니다. 코드가 작다면 그냥 익명의 함수를 정의하고 사용하면된다. (주로 Enum.map과 같이 콜백을받는 함수와 함께 사용된다.) 다른 곳에서 함수가 필요한 경우 이름이 지정된 함수로 함수를 추출하는 것이 좋습니다. 부가 메모로 익명 함수를 변수에 할당했습니다. 그건 내가보기 드문 일입니다. 한 번 사용 코드에는 인라인 익명 함수를 사용하고 재사용 가능한 코드에는 명명 된 코드를 사용하십시오. – vfsoraki

답변

2

당신은과 같이, 케이스 절, 또는 두 개의 기능 절에 하나의 기능을 할 것 중 하나

def handle_open({:ok, :done}), do: "OK" 
def handle_open({:error, _}), do: "Error:" 
+0

감사합니다. 어떻게 호출 할 수 있습니까? 귀하의 의견과 같은 두 가지 개인 기능을 만들고,이 패턴과 일치하는 할 수있는이'ExAws.S3.download_file ("# {Application_get_env (: ex_aws, : s3) [: bucket_s3}}", "foo.jpg ","../../public ") |> ExAws.request' – monkeyUser

+0

이 방법으로 함수를 작성합니다. https://pastebin.com/vYH2kzh1 – monkeyUser

1

을 일반적으로 매개 변수로.

Elixir의 많은 표준 라이브러리 함수는 함수를 매개 변수로 사용합니다. 예를 들어

, Enum.map :

Enum.map([1, 2, 3], &multiple_by_two/1) 

을하지만, 첫 번째 방법은 매우 사용하고 있습니다 : 또한라는 이름의 함수 정의 할 수

[1, 2, 3] 
|> Enum.map(fn(number) -> 
    number * 2 
end) 

def multiple_by_two(number), do: number * 2 

그리고 그것을 캡처 자주.

+0

감사합니다. denis하지만 이름 대신 anon을 사용해야하는 경우 ? – monkeyUser

+1

'해야만하는'경우에는 그런 경우를 알지 못합니다. 그들은 서로 교환 할 수있는 것처럼 보입니다. –

관련 문제