측정 단위 인수가있는 사용자 지정 형식을 사용할 때 컴파일러 오류 "로컬 호출에 대한 형식 인수가 틀립니다"가 실행되는 중입니다. 이유를 이해하십시오.컴파일러 오류 "로컬 호출에 대한 형식 인수의 개수가 올바르지 않습니다."
이 질문은 여러 번 수정되었습니다. 컴파일러 나 IDE 버그로 인해 오류가 발생한 것 같습니다.
이type R<[<Measure>] 'u> (f : float<'u>) =
member r.Member = f
let get (r : R<_>) = r.Member
let foo =
let problem _ = List.map get
problem // Error: Incorrect number of type arguments to local call
마지막 라인은 아무것도하지 않기 때문에, 특히 이상한 오류를 준다 :
나는 다음과 같은 (재생하려고 할 때 아래의 사항을 읽기)로 범위를 좁힐 수 이미 정의 된 식별자를 반환하는 것 이상. 나는 도서관이나 실행 파일로 컴파일하고있다. 재생에 대한 몇 가지 중요한 관찰 :
인텔리 하지이 오류를 예측한다. 그것을보기 위해서는 실제 컴파일이 필요합니다.
최적화를 사용하여 컴파일 할 때 오류를 아직 보지 못했습니다. (재현을 위해 Visual Studio에서 기본 디버그 컴파일을 사용하십시오. 이에 대한 Freenode의 zapu에게 감사드립니다.
F # interactive에서 오류를 아직 보지 못했습니다.
쓸모없는 매개 변수
problem
(_
)을 제거하면 오류가 사라집니다.problem
의 let 바인딩을 이동하면foo
이 사라져 오류가 사라집니다. 이것은 F # 함수로 컴파일과 관련이 있을까요? 이것은problem
유형에 대한 추가 괄호로 표시한다고 들었습니다.측정 단위 사용을 제거하면 오류가 사라집니다.
problem
을inline
으로 표시하면 오류가 사라집니다.
겉으로는 관련이없는 변경의 많은 오류를 제거합니다. 그러나 실제 사용 사례에서는 쉽지 않습니다. 특히 시도하기 전에 변경으로 인해 오류가 수정되었는지 여부를 알 수없는 경우 특히 그렇습니다.
나는 이것에 대한 어떤 힌트라도 기뻐할 것입니다. 그 원인은 무엇입니까? 버그일까요? 그렇다면 버그입니까? 어떻게 피할 수 있습니까?
버전이 버전은 F # 3.0에서 3.1.2 버전으로 테스트되었습니다. 새 Visual Studio 2013 Community Edition을 설치하고 동일한 버전으로 제공되는 버전으로 테스트했습니다. 또한 Visual Studio 2012 (F # 3.0)에서 발생합니다.
업데이트 : 나는 이것을 테스트하기 위해 다른 사람을 요청했습니다, 그리고 행동은 종종 2012 또는 2013
저에게는 컴파일러 오류가 없지만'problem _' 구문은 매우 이상하게 보입니다. 나는 당신이 무엇을하려고하는지 확실히 알지 못합니다. –
@ JohnPalmer 프로덕션 환경에서 원인이되는 훨씬 큰 코드를 복사하지 않고 오류를 재현하려고 시도했을뿐입니다. 버전 3.1.1에 대한 언급을 삭제했습니다. 그래도 질문에서; 무의식적으로 3.0 컴파일러를 사용했을 수도 있습니다. 나는 지금 무슨 일이 일어나고 있는지 알아 내려고 노력 중이며, 뭔가를 발견하면 질문을 업데이트 할 것입니다. 어쩌면 이미 어리석게도 이미 수정 된 버그를 겪어 왔습니다. – Vandroiy
@JohnPalmer 현재 설치되어있는 Visual Studio 2013 Community Edition에서 테스트 중이며 문제는 여전히 남아 있습니다. 정확히 당신이 사용한 것을 말해주십시오. 재생산을위한 각 포인트에 유의하셨습니까? – Vandroiy