2014-11-26 4 views
6

측정 단위 인수가있는 사용자 지정 형식을 사용할 때 컴파일러 오류 "로컬 호출에 대한 형식 인수가 틀립니다"가 실행되는 중입니다. 이유를 이해하십시오.컴파일러 오류 "로컬 호출에 대한 형식 인수의 개수가 올바르지 않습니다."

이 질문은 여러 번 수정되었습니다. 컴파일러 나 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 유형에 대한 추가 괄호로 표시한다고 들었습니다.

  • 측정 단위 사용을 제거하면 오류가 사라집니다.

  • probleminline으로 표시하면 오류가 사라집니다.

겉으로는 관련이없는 변경의 많은 오류를 제거합니다. 그러나 실제 사용 사례에서는 쉽지 않습니다. 특히 시도하기 전에 변경으로 인해 오류가 수정되었는지 여부를 알 수없는 경우 특히 그렇습니다.

나는 이것에 대한 어떤 힌트라도 기뻐할 것입니다. 그 원인은 무엇입니까? 버그일까요? 그렇다면 버그입니까? 어떻게 피할 수 있습니까?

버전이 버전은 F # 3.0에서 3.1.2 버전으로 테스트되었습니다. 새 Visual Studio 2013 Community Edition을 설치하고 동일한 버전으로 제공되는 버전으로 테스트했습니다. 또한 Visual Studio 2012 (F # 3.0)에서 발생합니다.

업데이트 : 나는 이것을 테스트하기 위해 다른 사람을 요청했습니다, 그리고 행동은 종종 2012 또는 2013

+0

저에게는 컴파일러 오류가 없지만'problem _' 구문은 매우 이상하게 보입니다. 나는 당신이 무엇을하려고하는지 확실히 알지 못합니다. –

+0

@ JohnPalmer 프로덕션 환경에서 원인이되는 훨씬 큰 코드를 복사하지 않고 오류를 재현하려고 시도했을뿐입니다. 버전 3.1.1에 대한 언급을 삭제했습니다. 그래도 질문에서; 무의식적으로 3.0 컴파일러를 사용했을 수도 있습니다. 나는 지금 무슨 일이 일어나고 있는지 알아 내려고 노력 중이며, 뭔가를 발견하면 질문을 업데이트 할 것입니다. 어쩌면 이미 어리석게도 이미 수정 된 버그를 겪어 왔습니다. – Vandroiy

+0

@JohnPalmer 현재 설치되어있는 Visual Studio 2013 Community Edition에서 테스트 중이며 문제는 여전히 남아 있습니다. 정확히 당신이 사용한 것을 말해주십시오. 재생산을위한 각 포인트에 유의하셨습니까? – Vandroiy

답변

1

이 실제로 버그이었다 비주얼 스튜디오에서 재현 할 수 있습니다. 나는 그것을보고했고 앤드류 케네디가 2015-01-30에 고쳤다. see this issue report for Visual F# on Github.

재미있는 부작용 :이 질문의 불합리한 코드는 회귀 테스트로 끝납니다. (이 경우 공개 도메인입니다)

F #의 향후 릴리스에서 더 이상이 문제가 없어야합니다. 재생산, 분석 및 수리에 도움을 주신 모든 분들께 감사드립니다!

관련 문제