문제

객체가있는 경우 유형을 어떻게 결정할 수 있습니까? (Java와 동등한 OCAML이 있습니까? instanceof 운영자?)

도움이 되었습니까?

해결책

OCAML은 Java와 같이 명목상 타이핑이 아닌 객체에 대한 구조적 타이핑을 가지고 있습니다. 따라서 객체의 유형은 기본적으로 그 방법에 의해 결정되며 결정됩니다. OCAML의 객체는 수업과 같은 것을 겪지 않고 직접 만들 수 있습니다.

인수 객체에 특정 방법이 있고 해당 메소드에는 특정 유형이 있어야하는 기능을 작성할 수 있습니다. 예를 들어, 다음 방법은 "bar"메소드가있는 객체 인 인수를 취합니다.

let foo x = x#bar

다른 팁

토론이 있습니다 "패턴과 일치하는 객체" ~에 람다 궁극 (논문은 스칼라를 언어로 사용하므로 질문에 답하지 않을 것입니다). 더 관련성 OCAML 메일 링리스트 스레드 객체에 대한 RTTI/Safe-Downcasting이 없음을 나타냅니다.

대수 (비 개체) 유형의 경우 분명히 다음과 같습니다.

match expr with 
  Type1 x -> x
  Type2 (x,y) -> y

~라고 불리는 (패턴) 일치

누군가가 글을 썼습니다 확대 이를 통해 다운/상향 캐스트 오카이어 객체를 허용합니다.

요컨대, 자신의 RTTI 메커니즘을 인코딩해야합니다. OCAML은 RTTI 또는 Up/Down 캐스팅을 제공하지 않습니다 (후자는 부분적으로 상속 및 하위 유형이 Java와 같이 통합되지 않고 OCAML에서 직교하기 때문에).

문자열 또는 다형성 변형으로 무언가를 할 수있어 클래스 및 객체에서 유형 정보를 인코딩 할 수 있습니다. Lablgtk 가이 중 일부를 수행한다고 생각하며 객체 태깅 및 위/다운 캐스팅을 지원하는 유틸리티 라이브러리를 제공합니다.

다소 주제가 아닌 OPA 언어 (OCAML의 일부 측면에서 크게 그리는)는 객체의 패턴 매칭과 동등한 것을 허용합니다. 그래서 그것은 매우 실현 가능합니다.

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