에서의 추론 문제 Visual Studio에서 F #을 사용하여 필자가 원하는 형식을 명시 적으로 더 많이 명시해야한다는 것을 알았습니다. 나는 이것을 해결하기위한 몇 가지 기술, 특히 우수한 순방향 배관 작업자의 사용에 대해 알고 있습니다. 그러나, 나는 많은 상황에서 이렇게 피할 수 없으며, 그 중 일부는 명백히 틀린 것처럼 보입니다. 세번째 줄은 해결 방법에 대한 호출로부터 리턴 쌍의 제 필요 타입 주석을 제안 오류 메시지를 생성F #
let b = new pqBoard(this)
let b2,steps = b.Solve()
if b2.Solved() then
let cont = steps |> List.exists (fun (s : string) -> s.IndexOf("Contradiction") >= 0)
:
예를 들어, I는 다음 코드 등 F # 코드를 이전 줄에. 그러나 쌍의 두 번째 요소 (문자열 목록)는 괜찮으며 이러한 주석이 필요하지 않습니다. 형식 검사기가 겉으로보기에는 쌍의 두 번째 형식인지 여부는 어떻게 알 수 있습니까? 단 한 번의 호출에서 반환 될 때 첫 번째 형식의 형식 검사기가 아닌가요?
let (b2 : pqBoard,steps) = b.Solve()
왜 내가 명시 적으로 첫 번째 요소가 아닌 초를 입력해야합니다 : 수정에게 문제를 다음과 같이
는 두 번째 줄을 변경?
또한이 경우와 기타 많은 경우 유추 된 유형이 VS에서 툴팁으로 올바르게 표시됩니다. 나는 VS 편집기가 어떤 의미에서 "짐작"하고 있다고 가정하지만, 나는 그것이 잘못 추측 된 것을 아직 보지 못했습니다!
필자는 필 요한 이유가 무엇인지 알지 못하고 명시 적으로 유형을 제공해야한다는 점을 실망스럽고 실망시킵니다. 어떤 도움을 주시면 감사하겠습니다. pqBoard
의 정의와는 무슨 일을 정확히 확인하기 위해 하드 년대 Solve
회원하지만 샘플 b2
과 steps
사이의 키 차이를 보지 않고
'Solve' 및'Solved'의 구현을 제공 할 수 있습니까? –
툴팁에 관해서 - 때로는 VS가 속임수로 쓰였으며, 실제 코드에서는 할 수없는 뒤로 보았습니다. –
"Solve"의 정의를 알기는하지만 그것은 generic 함수라고 생각합니다. 'b2.Solved()'를 사용하는 것은'b2'의 타입을 알아야하지만'List.exists'와's : string'에 의해 스텝이 효과적으로 타입이 덧붙여집니다. –