차별화 된 공용체의 모든 멤버가 공유하는 메소드를 정의하고 싶습니다. 현재 저는 이것을 이렇게 구현했지만 실제로는 더 좋은 방법이 있습니다. 제안?차별화 된 공용체 멤버 메소드
type A =
{AData:string}
member this.SharedMethod (x:float) : int= ...
type B =
{BData:float}
member this.SharedMethod (x:float) : int= ...
type AB =
| A of A
| B of B
let CallSharedMethod (ab:AB) x =
match ab with
| AB.A(a') -> a'.SharedMethod x
| AB.B(b') -> b'.SharedMethod x
인스턴스 바인딩이 누락되었습니다 (예 : this.SharedMethod). 그렇지 않으면 작동하지 않습니다. 또한 DU의 인스턴스 (실제로 레코드 유형)에 대한 공유 메소드가 무엇인지에 대한 정보를 추가해야합니다. 왜냐하면 아무 것도하지 않으면 정규 함수를 사용할 수 있기 때문입니다. 나는 네 사건이 아니라고 확신한다. – Gustavo
방법에 따라 나에게 냄새가 난다. 그러나 그렇지 않다면 레코드를 사용하여 인터페이스를 구현할 수 있습니다. – Daniel
예, 죄송합니다. 코드가 구문 상 정확하게 맞지 않았습니다. 나는 패턴에 더 관심이 있습니다. 하위 사용자의 모든 하위 유형이 공통 메소드 이름을 공유한다는 사실을 어떻게 나타낼 수 있습니까? 더 정확한 코드를 편집하겠습니다. –