হুম ... এই সংজ্ঞাটি বেশ কিছুদিন আগে দেখেছি এমন কিছু হাস্কেলের নমুনার সাথে খুব মিল বলে মনে হচ্ছে।
{-# 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
)
আপডেট হয়েছে: আমি আপনার প্রশ্নটি কেবল পুনরায় পড়েছি এবং আমি মনে করি জাভার জন্য আমি যথাযথ নির্মাণ পেয়েছি:
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
- এটি আসলে আপনার পছন্দ ₁
সুতরাং আমি অনুমান করি যে আমি বুঝতে পেরেছি যে ধ্রুপদী ওওপি ভাষাগুলি (জাভা, সি #, সি ++ ইত্যাদি) সর্বদা একক মান সহ অস্তিত্বের ধরণের প্রয়োগ করে this
এবং এর উপর একটি পদ্ধতি যা "পদ্ধতি" নামে অভিহিত হয় যা স্পষ্টভাবে সেই মানটির সাথে ডাকে :)
পিএস দুঃখিত, আমি জাভার খুব বেশি পরিচিত নই, তবে আমি আশা করি আপনি ধারণাটি পেয়ে গেছেন।