2016-09-13 4 views
3

캐릭터에 문자열을 분할하고 결과로 나타나는 모든 항목을 다듬 으려고합니다. 나는 String.trim/1가 존재하는 다음 작업 기대 : 주어진 함수를 값 목록에 매핑하는 방법은 무엇입니까?

iex> "My delimited ! string of doom" |> String.split("!") |> Enum.map(String.trim) 
** (UndefinedFunctionError) function String.trim/0 is undefined or private. Did you mean one of: 

    * trim/1 
    * trim/2 

(elixir) String.trim() 

나는 존재하지 않는 기능 String.trim/0를 나타내는 UndefinedFunctionError받을 수 있습니다.

iex> "My delimited ! string of doom" |> String.split("!") |> Enum.map(fn (word) -> String.trim(word) end) 
["My delimited", "string of doom"] 

Enum.map/2 두 번째 매개 변수로 익명 함수를 필요합니까 : 내가 원하는 것은 쉽게 Enum.map에 전달 된 익명 함수로 이루어집니다? 필자가 원하는 기능을 매개 변수로 제공 할 수 있습니까?

+0

@TheAnhLe는 당신에게 정확한 답을 주신 있지만, 나는 그것이 캡처 기능은 코드 "더 나은"수 있는지 여부를 논쟁의 여지 생각합니다. 제 생각에 익명의 함수가 실제로 코드를 이해하기 쉽도록 만들었지 만 YMMV는 그렇다고 생각합니다. –

+0

@OnorioCatenacci는 함수를 인수로 전달하기 위해 발행 된 Elixir 스타일 가이드 또는 관용적 인 Elixir를 보여줍니다. 나는 깨끗하고 간결한 코드를 작성하기 위해 선상에있다. –

+1

여기에 https://github.com/levionessa/elixir_style_guide가 있지만 익명의 함수를 사용하는 것보다 캡처를 사용하는 것의 문제는 아닙니다. –

답변

6

& operator을 사용해야합니다. Capture operator

이 시도 : 대답 비록

iex()> "my delimited ! string of doom" |> String.split("!") |> Enum.map(&String.trim/1) 
["my delimited", "string of doom"] 
3

을 @ theanh 르에 의해 귀하의 질문에 답을 완벽하게 확실히 정확하고, 당신은 모두 여기에 String#trim/1 필요하지 않습니다. String#split/3는 정규 표현식을 허용합니다

iex(1)> "delimited ! string of doom" |> String.split(~r{\s*!\s*}) 
["delimited", "string of doom"] 
+0

예가 조금 있습니다. 지도에 기존 함수를 전달하는 것은 모든 함수 언어에 대한 표준이며, 나는 왜 내 기대가 정확하지 않은지 이해하고 싶었습니다. –

관련 문제