예를 들어 게시 한 예제에서 함수의 두 정의에 같은 수의 인수가 있습니다.이 "when"이 가드이지만 많은 인수가있는 정의를 가질 수도 있습니다. - 첫째, 경비원들은 다음의 두 번째 줄처럼 단순한 일치로 기록 될 수없는 것을 표현하기 위해 사용됩니다
def fac(0), do: 1
def fac(n), when n<0 do: "no factorial for negative numbers!"
def fac(n), do: n*fac(n-1)
는 - 그냥 평등/매칭에 의해 존재 음수를 표현하는 것은 불가능하기 때문에 .
btw이 fac은 세 가지 경우에만 있습니다. 도에 아주 가까이 보인다
def fac(n) do
if n==0, do: 1, else: if n<0, do: "no factorial!", else: n*fac(n-1)
end
또는 스위치 케이스 (: 당신은이 좋네요 작성하는 방법이 될 것으로 생각할 수 있습니다 인수 : 의 위치에서 일정 "0"사용의 차가움을 주목하라 위) :
def fa(n) do
case n do
0 -> 1
n when n>0 -> n*fa(n-1)
_ -> "no no no"
end
end
"외모가 더 생겼습니다." 사실, 특정 정의 (예 : 파서, 작은 통역사)가 후자의 스타일보다 훨씬 잘 보입니다. Nb 가드 표현은 매우 제한적입니다. (저는 여러분이 자신의 함수를 사용할 수 없다고 생각합니다).
이제 진짜, 다양한 수의 인수가 - 이것을 확인하십시오!
def mutant(a), do: a*a
def mutant(a,b), do: a*b
def mutant(a,b,c), do: mutant(a,b)+mutant(c)
iex(1)> Lol.mutant(2)
4
iex(2)> Lol.mutant(2,3)
6
iex(3)> Lol.mutant(2,3,4)
22
그것은 계획처럼 유사한 조금 (람다 인수 ...) 작품 - 위에 목록과 일치하는 모든 인수를 복용 등의 돌연변이 생각합니다. 그러나 /,/2 돌연변이 및 돌연변이/3 돌연변이와 같은 그들에게 참조 할 3 개 기능이 때, 불로 불사의 영약 취급이 돌연변이.
질문에 대답하기 위해 다음은 오버로드 된 함수가 아니라 흩어져있는/조각난 정의입니다. 당신은 miranda, haskell, sml과 같은 기능적 언어로 비슷한 것들을 보았습니다.
정말 * 패턴 일치 * 및 보호 절에 대한 내용입니다. 인수에 가장 잘 맞는 * 함수 구현 *이 선택됩니다. 여기에는'when' 가드 절의 평가가 포함됩니다. 그것은 동일한 기능이며, 단지 여러 구현을 가지고 있습니다. – deceze
함수가 다른 서명을 가지고 있지만 괜찮습니다. 그러나 서명이 같을 때는 다른 액세스 (def 또는 defp)가 허용되지 않습니다. – PatNowak