OCAML : 확인 객체를 입력하십시오
-
07-07-2019 - |
문제
객체가있는 경우 유형을 어떻게 결정할 수 있습니까? (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의 일부 측면에서 크게 그리는)는 객체의 패턴 매칭과 동등한 것을 허용합니다. 그래서 그것은 매우 실현 가능합니다.