2017-02-10 1 views

답변

3

당신은이에 대한 partial application syntax를 사용할 수 있습니다

aaa = Enum.find(Statuses, &(&1.name == :pending)) 

또는

또한
iex(1)> f = &(&1.name == :pending) 
#Function<6.52032458/1 in :erl_eval.expr/5> 
iex(2)> f.(%{name: :pending}) 
true 
iex(3)> f.(%{name: :complete}) 
false 
0

aaa = Enum.find(Statuses, & &1.name == :pending) 
는 Dogbert에 의한 대답은 완벽, 평소와 같이, 나도 여기에 광산을 둘 것 포맷팅을 위해서.

이것은 Elixir이 잘못된 방식으로 일을하지 못하게하는 완벽한 예입니다. 그러한 방법이 이 아니고이면 쉽게 접근 할 수 있습니다.

name의 값이 :pending 인 구조체를 찾고 있습니다. Kernel.match?/2 매크로, 명시 적으로 작업을 수행 :

iex> [%{n: 1, name: :pending}, %{n: 2, name: :complete}] 
    |> Enum.find(&match?(%{name: :pending}, &1)) 
%{n: 1, name: :pending} 

견적 문서에서 : 열거 가능한에 값을 찾는 필터링 할 때

match?/2 매우 유용합니다

list = [{:a, 1}, {:b, 2}, {:a, 3}] 
Enum.filter list, &match?({:a, _}, &1) 
#⇒ [{:a, 1}, {:a, 3}] 
+0

유감 스럽지만 다음과 같이 잘못되었습니다 :'[% {n : 1, 이름 : : 완료}, % {n : 2, 이름 : : p % {n : 1, 이름 : : 완료}'. (MatchError) 오른쪽 열의 값과 일치하지 않습니다. – Dogbert

+0

@Dogbert 실제로, 그러나 이것은 나에게 어리석은 보입니다. 어쩌면 작동 할 것입니다. (아마도 정확한 방법은 아니지만 다른'Enum.select/2' 또는 이와 유사한 메소드를 사용하십시오.)이 응답을 제거하고 대신 기능 요청을 fullfil합니다. – mudasobwa

관련 문제