2009-11-04 5 views
2

함수 정의에서 일치 할 가능성이 있으며 touple의 일부 하위 집합을 수행하고 여전히 메서드에서 touple을 얻을 수 있습니까?별칭과 일치하는 얼랭 패턴

myfun({ foo, Bar }: Var) -> otherfunction(Var, stuff). 

대신 :

myfun({ foo, Bar }) -> otherfunction({ foo, Bar }, stuff). 

난이 충분히 명확 희망 내가하고 싶은 무엇

이 같은 것입니다.

감사합니다. 이런 식으로

myfun({foo, Bar } = Var) -> 
    otherfunction(Var, stuff). 

, 당신은 myfun/1 (하나 개의 매개 변수)로 함수를 내보낼 수 있습니다

+0

질문을 다시 말하면 좋겠습니까? 나에게 정말로 명확하지 않다 ... –

+0

글쎄, 나는 아마 그것을 철회해야한다, 당신은 나를 위해 그것을 대답했다, = Var 부분은 내가 찾고있는 부분이었다. 보기에, RTFM이 정답이었을 것입니다. – ptriller

답변

6

밑줄을 앞에 붙여서 일부 매개 변수를 무시할 수 있습니다. 예 :

myfun({foo, _Bar, Var })

는 _Bar 매개 변수를 무시 일치합니다. 그게 니가 염두에 두었던거야?

가 아니면 이것을 찾으 셨나요?

이 경우

myfun({foo, Bar} = Var) -> otherfun(Var).

, 바르는 성공 myfun와 경기 IFF otherfun에 사용됩니다. 이유는 다음과 같습니다. Var은 표현식을 평가할 때 바인딩 해제되어 {foo, Bar}에 할당됩니다.

+1

"_Bar 매개 변수 무시"가 반드시 정확하지 않습니다. 변수 _Bar는 튜플의 두 번째 요소에 바인딩되며 일반 변수로 사용될 수 있습니다. _Bar가 _로 시작하면 컴파일러는 사용되지 않는 것에 대해 경고하지 않습니다. 이 _Bar은 별개의 변수로서 동작하며 하나의 변수로 사용할 수 있습니다. – rvirding

+0

@rvirding : 예, 향상된 문구를 주셔서 감사합니다. – jldupont

5

은 어쩌면 이것은 당신이 무엇을 의미하는지입니다. 두 개의 요소가있는 튜플에서만 일치합니다. 첫 번째 것은 "foo"아톰이어야하며 두 번째 것은 아무거나 될 수 있습니다. 함수에 다른 절을 지정하지 않으면 다른 모든 경우에 함수 절이 생깁니다. 예를 들어, 다음과 같은 의미가 있습니다.

myfun({foo, Bar } = Var) -> 
    otherfunction(Var, stuff); 
myfun(Var) -> 
    {error, bad_format}. 

나는 이것이 당신이 요구하는 것이라고 확신하지 않습니다. 이게 도움이되는지 알려주세요.

-3

내가 맞다면, Var을 설정하고, 추가 점검 없이도 { foo, Bar }과 일치하는 touple 만 포함하면됩니다. 내가 본 것까지 Erlang에서 이것을 할 수 없다. 죄송합니다. :)

+0

틀린 경우 : 답변을 다시 확인하십시오. – jldupont

+1

올바르지 않습니다. 다른 두 개의 게시물은 실제로 그가 요구하는 것을 할 수 있음을 나타냅니다. –