흠 ... 그 정의는 오래 전에 본 일부 하스켈 샘플과 매우 유사 해 보입니다.
{-# LANGUAGE ExistentialQuantification #-}
data X = forall a . X { value :: a, viewValue :: a -> String }
instance Show X where show (X { value = x, viewValue = f}) = f x
sample :: [X]
sample = [X 3 show, X "abc" show, X 3.14 show]
생성자 X
가 적용될 때 실제로는 ∀가됩니다. 꺼내면 value
유형을 모르고 그 위에 빈 작업 집합이 있습니다. 그러나 viewValue
좀 일관성이 value
있기 때문에 적용 할 수 있습니다.
나는 자바의 주요 차이점 추측 interface
당신이 제안이 당신의 결과를 전달하는 중간 타입을 알고 있다는 사실이다 op₁
에를 op₂
. 즉, 실존 유형에 적합한 시스템은 조건에 따라 존재하는 올바른 유형을 선택해야합니다. 즉, 유형이 다음과 같은 함수를 작성할 수 있어야합니다 ∀X. X→(X→boolean)→T
. 이전 샘플에서 그러한 함수는 X
생성자에서 사용됩니다 X 3 show
( show
구현 Show
하고 리턴 하는 모든 유형의 인수를 취하는 함수입니다 String
)
업데이트 : 나는 당신의 질문을 다시 읽고 Java에 대한 적절한 구성을 가지고 있다고 생각합니다.
interface T {
boolean op₂();
}
...
T x = new T() {
private final int op₁ = ...;
public boolean op₂() { return ((op₁ % 2) == 0); }
};
T y = new T() {
private final char op₁ = ...;
public boolean op₂() { return ('0' <= op₁ && op₁ <= '9'); }
};
if (x.op₂() && y.op₂()) ...
당신은 언급에 대해 옳습니다 this
-그것은 실제로 당신의 op₁입니다.
그래서 고전 OOP 언어 (Java, C #, C ++ 등)는 항상 단일 값으로 존재 유형을 구현 this
하고 그 값으로 암시 적으로 호출되는 "메소드"라는 함수를 구현한다는 것을 알았 습니다. :)
추신 : 죄송합니다. Java에 익숙하지 않지만 아이디어가 있기를 바랍니다.