স্কেল গণনা বোঝা


122

আমাকে বলতে হবে আমি স্কালার গণনা বুঝতে পারি না। আমি দস্তাবেজ থেকে উদাহরণটি কপি-পেস্ট করতে পারি, তবে কী চলছে তা আমার কোনও ধারণা নেই।

object WeekDay extends Enumeration {
  type WeekDay = Value
  val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
import WeekDay._
  • মানে কী type WeekDay = Valueএবং কেন আমাকে লিখতে হবে?
  • কেন val Mon = Value? এমনকি এর অর্থ কি?
  • আমাকে কেন WeekDay বস্তুটি আমদানি করতে হবে ? এবং,
  • আমি যখন লিখি val day = WeekDay.Mon, কেন এটি টাইপ হয় WeekDay.Value, টাইপ হয় না WeekDay?

2
আমি স্কেল অঙ্ক এবং বিকল্পগুলি সম্পর্কে একটি ছোট ওভারভিউ লিখেছি, আপনি এটি দরকারী খুঁজে পেতে পারেন: pedrorijo.com/blog/scala-enums/
pedrorijo91

সিলযুক্ত বৈশিষ্ট্যগুলি একটি দুর্দান্ত বিকল্প সরবরাহ করে - স্ট্যাকওভারফ্লো
জো জো বারুচ

উত্তর:


150

Enumerationবৈশিষ্ট্য একটি টাইপ জন সদস্য রয়েছে Valueশুমার পৃথক উপাদান (এটা আসলে একটি ভিতরের বর্গ, কিন্তু পার্থক্য ব্যাপার এখানে না) উপস্থাপন করে।

সুতরাং object WeekDayএই ধরণের সদস্য উত্তরাধিকার সূত্রে প্রাপ্ত। লাইনটি type WeekDay = Valueকেবল একটি টাইপ ওরফে । এটি দরকারী, কারণ এটির সাথে অন্য কোথাও আমদানি করার পরে আপনি import WeekDay._এই ধরণের ব্যবহার করতে পারেন, যেমন:

def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)

পরিবর্তে, একটি সর্বনিম্ন সংস্করণটি হ'ল:

object WeekDay extends Enumeration {
  val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}

এবং আপনি না আছে বিষয়বস্তু আমদানি object WeekDay, কিন্তু তারপর আপনি টাইপ ব্যবহার করতে হবে WeekDay.Valueএবং প্রতিটি সদস্যের যোগ্যতা। সুতরাং উদাহরণ হয়ে উঠবে

def isWorkingDay(d: WeekDay.Value) = ! (d == WeekDay.Sat || d == WeekDay.Sun)

দ্বিতীয় প্রশ্নটির অর্থ সম্পর্কে val Mon, ... = Value। এটি বাস্তবায়নের দিকে নজর না দিলে এটি অবশ্যই খুব বিভ্রান্তিকর Enumeration। এটি কোনও ধরণের অ্যাসাইনমেন্ট নয়! এটা তোলে পরিবর্তে একটি সুরক্ষিত কল করছে একই নামের পদ্ধতি , Valueযার ধরনের একটি কংক্রিট উদাহরণ হিসেবে বলা যায় ফেরৎ Value

যদি এমন হয় যে আপনি লিখতে পারেন val a, b, c = fooScala, এবং প্রতিটি মান জন্য a, bএবং cপদ্ধতি fooআবার এবং আবার ডাকা হবে। Enumerationঅভ্যন্তরীণ কাউন্টারকে বাড়ানোর জন্য এই কৌশলটি ব্যবহার করে যাতে প্রতিটি মান পৃথক হয়।

আপনি যদি স্কালা এপিআই ডকসগুলি খুলেন Enumerationএবং ক্লিক করেন Visibility: All, আপনি সেই পদ্ধতিটি উপস্থিত দেখবেন।


2
ধন্যবাদ, এটি খুব বিভ্রান্তিকর তবে আমি মনে করি এটি সঠিক। পরিবর্তে আমি সিল করা কেস ক্লাস ব্যবহার করব, এটি 100% সহজ বলে মনে হচ্ছে।
কারেল বালেক

2
আমি ব্যক্তিগতভাবে সিল করা কেস ক্লাসগুলিও পছন্দ করি। কিছুটা আরও ভার্বোজ, তবে মিউচুয়েবল অভ্যন্তরীণ কাউন্টারগুলির সাথে কম হোকাস-পোকাস এবং আরও কিছু। স্কেলা ২.১০ এর সাথে কিছু ধারণা রয়েছে যে কীভাবে গণনাগুলি (যা জাভা একটি ভাষা নির্মাণ নয় কেবলমাত্র একটি লাইব্রেরির সমাধান নয়) ম্যাক্রোগুলি ব্যবহার করে আরও ভাল লেখা যায়।
0__

@ 0__ আমি জিজ্ঞাসা করতে পারি কেন এবং আপনি স্কালায় এনাম প্রতিস্থাপনের জন্য সিল করা ক্লাসটি কীভাবে এবং কীভাবে ব্যবহার করেন? স্কালার গণনায় কিছু ভুল আছে?
x1a0

এনুমের নিজস্ব সদস্য থাকলে মূল্য কী? আপনি উদাহরণস্বরূপ সপ্তাহের প্রতিটি দিনের মতো উদ্বোধনের সময়গুলি কীভাবে সংজ্ঞায়িত করবেন: সোম (8,20), ..., সূর্য (0,0)?
16

1
@ সিমু তাহলে আপনার অবশ্যই একটি সিলড বৈশিষ্ট্য এবং প্রকৃত উপ শ্রেণি ব্যবহার করা উচিত। যদিও আমি দৃ scenario়তার সাথে সেই দৃশ্যটিকে "গণনা" বলব। আপনি আরও ভাল লিখতে পারেন Open(Mon, 8, 20)এবং দিনগুলি একটি সমতল গণনা হিসাবে থাকবে।
0__ 17
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.