다음 코드를 고려해이 같은 오류를 제공하지만, -(aInherited :> Base)
및 cos (aInherited :> Base)
작업을 수행 cos aInherited
와상속 된 형식에서 단항 부정 및 수학 함수가 작동하도록하려면 어떻게해야합니까?
error FS0001: This expression was expected to have type
Inherited
but here has type
Base
같은 :
type Base(x : float) =
member this.x = x
static member (~-) (a : #Base) = Base(-a.x)
static member Cos (a : #Base) = Base(cos a.x)
type Inherited(x : float) =
inherit Base(x)
let aBase = Base(5.0)
let aInherited = Inherited(5.0)
-aBase // OK, returns Base(-5.0)
-(aInherited :> Base) // OK, returns Base(-5.0)
-aInherited // not OK
마지막 줄에서 오류가 발생합니다.
오류 메시지는 이러한 함수가 -
또는 cos
의 반환 형식이 인수 형식과 같을 것을 제안합니다. 이것은 지나치게 까다로운 요구 사항처럼 보입니다.
- 연산자를 정의하는 기본 형식을 상속하는 클래스의 경우 모든 연산자를 재정의하지 않으면 불가능합니다.
- 이러한 클래스는 당신이 제어하지 않는 이상 외부 라이브러리에있는 경우 , 당신의 선택은 더욱 제한되어 있습니다.
이 주위에 방법이 있나요? F # 소스 코드에서 cos
함수는 prim-types.fs
에 정의되어 있습니다.
내가 그것을 버그 생각하지 않습니다,이 방법 사업자와 F 번호 거래, 글로벌 범위에서 첫 모습입니다, 두 가지 유형을 모두 강제하는 특정 서명이있는 전역 정의를 찾습니다. 똑같다. 따라서 오류 메시지. – Gustavo
@Gustavo 그런 경우라면,이 동작이 예상됩니다. 더 나은 오류 메시지가있을 것입니다. 상속 된 연산자 또는 무엇이든에 관한 것입니다. 표준 입력 관련 오류 메시지를 재사용하기 때문에 간과 된 연산자 오버로딩의 뚜렷한 문제인 것처럼 보입니다. –