문제

나는 blurb를 읽었다 이상 가중, 나는 그것을 읽었다 통로 전문가 F# (119 페이지)에서 내 코드에 어떻게 적용되는지 알 수 없습니다.

내 테스트의 경우 약간의 관용으로 플로트 간의 평등을 확인하고 싶습니다. 나는 모든 것을 측정 단위로 변환하고 있지만 '일반적인'일 수 있기를 원합니다.

let toleq (e:float<_>) a b = (abs ( a - b ) ) < e

그런 다음 이것을 사용하여 다른 '유형'의 플로트에서 평등을 확인하거나 커리기를 위해 커머지를 만들 수 있습니다.

toleqm = toleq 1.0e-10<m>

하지만 다음과 같은 메시지를받습니다.

Type inference has inferred the signature
    val toleq : float<'u> -> float<'u> -> float<'u> -> bool
Either define 'toleq' as a simple data term, make it a function, or add a 
    type constraint to instantiate the type parameters.

기능을 만들기 위해 더 이상 수행 할 수있는 방법을 알지 못합니다. 암시 적 매개 변수를 볼 수 없습니다.

무슨 일이야?

도움이 되었습니까?

해결책

글쎄, 나는 약간 엉망이되어 절망적 인 해결책을 찾았지만 왜 그런지 이해하지 못한다 ...

let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e

어, 그것은 C#의 일반적인 선언만큼이나 추악합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top