0
동등 연산자와 비교 연산자를 오버라이드하여 bool 이외의 다른 유형을 생성하는 특별한 이유가 있습니다.부울 반환 유형이 아닌 동등 연산자 및 비교 연산자에 오버로드하기
나는 아래의 해결 방법을 가지고 있지만 왜 언어가 더 쉽게 할 수 없습니까?
내가 여기서 다루는 것은 이러한 연산자가 이미 오버로드되어있는 외부 라이브러리이므로 F #에서 동일한 방식으로 작업하기를 원할뿐입니다. 그것을 성취하기 위해서 내가해야만하는 것은 옳지 않은 것 같습니다.
type ATArrayLT = ATArrayLT with
static member (?<-) (x:ATArray, ATArrayLT, y:int ) = ATArray.op_LessThan(x, float32 y)
static member (?<-) (y:int , ATArrayLT, x:ATArray) = ATArray.op_LessThan(x, float32 y)
static member (?<-) (x:ATArray, ATArrayLT, y:float32) = ATArray.op_LessThan(x, y)
static member (?<-) (y:float32, ATArrayLT, x:ATArray) = ATArray.op_LessThan(x, y)
static member (?<-) (x:ATArray, ATArrayLT, y:ATArray) = ATArray.op_LessThan(x, y)
static member inline (?<-) (x , ATArrayLT, y ) = x < y
let inline (<) x y = x ? (ATArrayLT) <- y
비교 및 동등성은 구조체 평등, 해시 및 비교를 허용하는 구성 필드 유형을 갖는 F # 전용 튜플 및 "목록, 옵션, 배열 및 사용자 정의 레코드, 유니온 및 구조체 유형의 모든 유형에 대해 구조적 구조는 아닙니다 ". 따라서 사용자 정의 클래스의 경우 해당 연산자에 과부하가 걸릴 수 있습니다. –
사실입니다. 내 요점은 평등/비교가 F #에서 다르게 정의되고 잘 작동한다는 것입니다. 그것들은 C#에있는 것처럼 임시적인 의미를 지닌 통사론적인 설탕이 아닙니다. 그들은 F #에서 사용자 정의 할 수 있습니다. OP가 원하는 범위가 아닙니다. – Daniel
위의 방법을 사용할 때 위험이 있습니까? – Dave