স্কালার বৈশিষ্ট্যগুলি কীভাবে "ডায়মন্ডের ত্রুটি" এড়ানো যায়?


16

(দ্রষ্টব্য: আমি সুস্পষ্ট কারণে শিরোনামে 'সমস্যা' এর পরিবর্তে 'ত্রুটি' ব্যবহার করেছি ..;))।

স্কালায় ট্রেইটসের বিষয়ে কিছু প্রাথমিক পাঠ করেছি। এগুলি জাভা বা সি # এর ইন্টারফেসের মতো, তবে তারা কোনও পদ্ধতির ডিফল্ট বাস্তবায়নের অনুমতি দেয়।

আমি ভাবছিলাম: এটি কি "হীরা সমস্যা" এর কারণ হতে পারে না, এ কারণেই অনেক ভাষা প্রথম স্থানে একাধিক উত্তরাধিকার এড়িয়ে চলে?

যদি তা হয় তবে স্কেলা কীভাবে এটি পরিচালনা করবে?


আপনার গবেষণা ভাগ করে নেওয়া প্রত্যেককে সহায়তা করে । আপনি কী চেষ্টা করেছেন এবং কেন এটি আপনার প্রয়োজনীয়তা মেটেনি তা আমাদের বলুন। এটি প্রমাণ করে যে আপনি নিজেকে সাহায্য করার চেষ্টা করার জন্য সময় নিয়েছেন, এটি আমাদের সুস্পষ্ট উত্তরের পুনরাবৃত্তি থেকে বাঁচায় এবং সর্বোপরি এটি আপনাকে আরও নির্দিষ্ট এবং প্রাসঙ্গিক উত্তর পেতে সহায়তা করে get কীভাবে জিজ্ঞাসা করতে হবে
gnat

2
@ গ্যানাট: এটি একটি ধারণামূলক প্রশ্ন, কোনও কংক্রিট সমস্যার প্রশ্ন নয়। যদি তিনি জিজ্ঞাসা করছেন "স্ক্যালায় আমার এই ক্লাস রয়েছে এবং এটি আমাকে এমন সমস্যা দিচ্ছে যা আমি মনে করি যে এটি ডায়মন্ড সমস্যার সাথে সম্পর্কিত হতে পারে তবে আমি কীভাবে এটি সংশোধন করব?" তাহলে আপনার মন্তব্য উপযুক্ত হবে, তবে তারপরে প্রশ্নটি এসও এর সাথে সম্পর্কিত। : পি
ম্যাসন হুইলার

@ ম্যাসনওহিলার আমি স্কালায় কিছু প্রাথমিক পাঠও করেছি। এবং আমি যা পড়েছি তাতে "হীরা" এর জন্য প্রথম সন্ধানটি আমাকে উত্তর দিয়েছিল: "জাভা ইন্টারফেসের নির্মাণের সমস্ত বৈশিষ্ট্য একটি বৈশিষ্ট্যের মধ্যে রয়েছে But তবে বৈশিষ্ট্যগুলি সেগুলিতে পদ্ধতি প্রয়োগ করতে পারে you আপনি যদি রুবির সাথে পরিচিত হন, তবে বৈশিষ্ট্যগুলি একই রকম রুবির মিশ্রণগুলিতে। আপনি অনেকগুলি বৈশিষ্ট্যকে একটি একক শ্রেণিতে মিশ্রিত করতে পারেন Tra এই প্রশ্নে প্রচেষ্টার অভাব বরং স্থূল মতানুযায়ী
মশা

7
বিবৃতিটি পড়া আপনাকে কেবল এটির মত করে না tell
মাইকেল ব্রাউন

উত্তর:


22

হীরকের সমস্যাটি হ'ল পদ্ধতিটি কোনটি প্রয়োগ করবে তা সিদ্ধান্ত নিতে অক্ষম। ভাষা প্রয়োগের অংশ হিসাবে কোন প্রয়োগকে বেছে নিতে হবে তা নির্ধারণ করে স্কেলা এটিকে সমাধান করে ( এই উইকিপিডিয়া নিবন্ধে স্কালার অংশটি পড়ুন )।

অবশ্যই, একই ক্রমের সংজ্ঞাটি শ্রেণীর একাধিক উত্তরাধিকারেও ব্যবহার করা যেতে পারে, তবে বৈশিষ্ট্যগুলি কেন বিরক্ত করবেন?

আইএমওটি কনস্ট্রাক্টর হওয়ার কারণ। কনস্ট্রাক্টরগুলির নিয়মিত পদ্ধতিগুলির কোনও সীমাবদ্ধতা থাকে না - সেগুলি কেবলমাত্র প্রতিটি বস্তুর জন্য একবার কল করা যেতে পারে, এবং প্রথম শ্রেণীর নির্দেশ হিসাবে একটি শিশু শ্রেণির কনস্ট্রাক্টরকে অবশ্যই তার পিতামাতার কনস্ট্রাক্টর বলতে হবে (বেশিরভাগ ভাষায় ভাষা আপনার যদি প্যারামিটারগুলি পাস করার প্রয়োজন না হয় তবে এটি স্পষ্টভাবে করুন।

যদি বি এবং সি উত্তরাধিকার সূত্রে এ এবং ডি উত্তরাধিকার সূত্রে বি এবং সি উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং বি এবং সি এর উভয় কনস্ট্রাক্টর এ এর ​​কনস্ট্রাক্টরকে কল করে তবে ডি এর কনস্ট্রাক্টর দু'বার এ'র কনস্ট্রাক্টরকে কল করবে। পদ্ধতিগুলির সাথে স্কালার মতো কোন প্রয়োগগুলি বেছে নেওয়ার তা নির্ধারণ করা এখানে কাজ করবে না কারণ বি এবং সি এর উভয় নির্মাণকারীকেই ডাকতে হবে।

বৈশিষ্ট্যগুলি এ সমস্যা এড়ায় যেহেতু তাদের কাছে নির্মাণকারী নেই।


1
কনস্ট্রাক্টরকে একবার এবং কেবল একবার কল করার জন্য সি 3 লিনিয়ারাইজেশন ব্যবহার করা সম্ভব - পাইথন একাধিক উত্তরাধিকার করে does আমার মাথার উপরের দিকে ডি <বি | সি <হীরাটি ডি -> বি -> সি -> এ জন্য রৈখিককরণের আরও একটি গুগল অনুসন্ধান আমাকে দেখিয়েছে যে স্কালার বৈশিষ্ট্যে পারস্পরিক পরিবর্তনশীল পরিবর্তনশীল থাকতে পারে, তাই অবশ্যই এখানে একটি আছে কনস্ট্রাক্টর কোথাও কোথাও? তবে যদি এটি হুডের নীচে রচনাটি ব্যবহার করে (আমি জানি না, কখনও স্কাল ব্যবহৃত হয়নি) এটিকে দেখা যায় যে বি এবং সি ভাগ করে নিতে পারে ...
দোভাল

... বৈশিষ্ট্যগুলি কেবল সমস্ত বয়লারপ্লেটকে প্রকাশ করার জন্য খুব সংক্ষিপ্ত পথ বলে মনে হয় যা ইন্টারফেসের উত্তরাধিকার এবং রচনা + প্রতিনিধিদের সম্মিলনে চলে যায়, যা আচরণের পুনরায় ব্যবহারের সঠিক উপায়।
ডোভাল

@ ডোভাল বহুগুণে উত্তরাধিকারী পাইথনের নির্মাণকারীদের আমার অভিজ্ঞতা হ'ল তারা রাজকীয় ব্যথা। প্রতিটি কন্সট্রাক্টর জানতে পারবেন না যে এটিতে কোন আদেশটি ডাকা হবে, তাই জানেন না যে এটির প্যারেন্ট কন্সট্রাক্টরের স্বাক্ষর কী। সাধারণ সমাধান হ'ল প্রতিটি নির্মাণকারীর পক্ষে একাধিক কীওয়ার্ড আর্গুমেন্ট গ্রহণ করা এবং অব্যবহৃতদেরকে তার সুপার কনস্ট্রাক্টরের কাছে পাস করা, তবে আপনার যদি এমন একটি বিদ্যমান শ্রেণীর সাথে কাজ করার প্রয়োজন হয় যা এই সম্মেলনটি অনুসরণ করে না, আপনি নিরাপদে থেকে উত্তরাধিকারী হতে পারবেন না এটা।
জেমস_পিক

আর একটি প্রশ্ন হ'ল সি ++ কেন হীরা সমস্যার জন্য বুদ্ধিমান নীতি বেছে নিল না?
ব্যবহারকারী

21

স্কেলা হীরা সমস্যাটি "বৈশিষ্ট্য রৈখিকতা" নামে কিছু এড়িয়ে চলে। মূলত, এটি আপনি ডান থেকে বামে যে বৈশিষ্ট্যগুলি প্রসারিত করে সেগুলি পদ্ধতি প্রয়োগের সন্ধান করে। সাধারণ উদাহরণ:

trait Base {
   def op: String
}

trait Foo extends Base {
   override def op = "foo"
}

trait Bar extends Base {
   override def op = "bar"
}

class A extends Foo with Bar
class B extends Bar with Foo

(new A).op
// res0: String = bar

(new B).op
// res1: String = foo

এটি বলার পরে, এটি যে বৈশিষ্ট্যগুলি দেখায় সেগুলির তালিকায় আপনি স্পষ্টত যা বলেছিলেন তার চেয়ে বেশি থাকতে পারে, কারণ তারা অন্যান্য বৈশিষ্ট্যগুলি প্রসারিত করতে পারে। একটি বিশদ ব্যাখ্যা এখানে দেওয়া হয়েছে: স্ট্যাকেবল পরিবর্তন হিসাবে বৈশিষ্ট্য এবং রৈখিকরণের আরও সম্পূর্ণ উদাহরণ এখানে: কেন একাধিক উত্তরাধিকার নয়?

আমি অন্যান্য প্রোগ্রামিং ভাষায় বিশ্বাস করি যে আচরণটি মাঝে মধ্যে "পদ্ধতি সমাধানের আদেশ" বা "এমআরও" হিসাবে পরিচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.