저는 F #을 처음 접했고 일부 재귀 함수로 작업 할 때 이상한 동작을 발견했습니다. 아래에 두 가지 버전이 있습니다.
버전 1 :
이로 인해 스택 오버플로가 발생하지만 그럴 필요는없는 것 같습니다 (적어도 멍청한 눈에는)
let rec iMake acc =
match acc with
| 10 -> 100
| _ -> iMake acc+1
Version2 :
이것은 내가 예상했던대로 작동합니다.
let rec iMake acc =
match acc with
| 10 -> 100
| _ -> iMake (acc+1)
유일한 차이점은 버전 2는 acc + 1 표현식을 괄호 안에 넣는 것입니다. 제 질문은 왜 첫 번째 버전은 작동하지 않지만 두 번째 버전은 작동합니까? 이것은 미래에 이런 유형의 것을 피하기 위해 모든 함수 인수를 괄호 안에 넣어야 함을 의미합니까?
Function call
이항 연산자보다 우선 순위가 높습니다 +
. 따라서 첫 번째 기능은 실제로 다음과 같이 작동합니다.
let rec iMake acc =
match acc with
| 10 -> 100
| _ -> (iMake acc)+1
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다