2010-07-20 5 views
2

지정된 함수에 대해 패턴 일치를 직접 사용하거나 필요한 모든 함수에 대해 유형을 지정하지 않는 일부 익스플로잇과 함께 사용할 수 있습니까?OCaml의 함수와 일치합니까?

그냥

가 따라 다른 일을 할 수 있습니다 .. 내가

type BBoolOp = (bool->bool->bool)*term*term 

같은 유형이 있고 bool->bool->bool 기능은 단지 (&&)(||) 같은 몇 가지 아주 간단한 것을 가정 가정보다 일을 설명하기 다음과 같이 지정된 함수에서 :

match bop with 
    (||) -> do something 
    | (&&) -> do something else 

이렇게해서는 안됩니다. 사용 기능 비교 될 수 없지만 어쩌면 악용 내가

답변

6

비교 기능은 지원되지 않습니다. 어떤 경우에는 효과가있을 수 있지만, IMO가 좋지 않은 경우에 따라 다릅니다.

그래서이 문제를 해결하기 위해 대수 데이터 형식을 사용합니다. 다형성 변형을 사용하여 패턴 매칭 오버 기능 개념 (패턴 매칭 코드가 모든 가능한 연산자를 알 필요가 없음)의 유연성을 되 찾을 수있을 것입니다. 그래서 하나가

type BBoolOper = And | Or 
type BBoolOp = BBoolOper * term * term 

또는

type BBoolOp = [<`And | `Or] * term * term (* make opened/closed as needed *) 
2

기능이 어떤지를 테스트 할 수 있습니다 사전에 :)

감사 할 노력하고있어 일을하기 위해 존재한다. 임시 클로저가 아닌 함수를 비교하는 것이 좋습니다 (패턴 일치가 아닌). 코드가 읽기 쉽고 깨지기 쉽습니다.

+2

나는이 작업을 수행하지 않을 것입니다. 언어 정의는 언제든지 바뀔 수 있으며, 향후 버전에서 함수를 테스트 할 테이블에 의존하지 않을 것입니다. –