কেস অবজেক্ট এবং অবজেক্টের মধ্যে পার্থক্য


226

স্কেল ক্ষেত্রে কেস অবজেক্ট এবং অবজেক্টের মধ্যে কোনও পার্থক্য আছে?


3
তার একটি বক্তব্য রয়েছে - এটির সাথে প্যাটার্ন মিলতে সক্ষম হওয়ার জন্য কোনও কেস অবজেক্ট থাকা প্রয়োজন নয়। আমি মনে করি এটি পূর্ববর্তী প্রশ্নে সম্বোধন করা হয়নি ...
axel22

3
আমি ভেবেছিলাম প্যাটার্ন মেলানো আচরণের মধ্যে পার্থক্য থাকবে তবে কেস অবজেক্ট এবং একটি সাধারণ অবজেক্ট উভয়ই প্যাটার্ন ম্যাচে আফাইকের সাথে একই রকম আচরণ করে। কেস অবজেক্টস সম্পর্কে কোনও তথ্য খুঁজে পাওয়া বেশ কঠিন তাই আমি আমাদের আলোকিত করার জন্য অপেক্ষা করছি।
বয়স মুইজ

4
caseপ্যাটার্ন ম্যাচিংয়ের জন্য এটি ব্যবহার করার দরকার নেই, এটি কেবল চিনি। unapplyনিজেকে বাস্তবায়ন করা কাজটি করে।
রাফেল

1
গৃহীত উত্তর কেবল প্রশ্নের উত্তর দেয় না, যেমন এটির মন্তব্যে আলোচনা করা হয়েছে। কোনও পার্থক্য করতে দেরি করেও, তবে লক্ষ্য করা উচিত।
ব্রুস

গৃহীত উত্তরটি সম্পাদনা করতে খুব বেশি দেরি হয়নি। সম্পাদনাটি পর্যালোচনা করা হবে এবং প্রাসঙ্গিক হলে, গৃহীত হবে।
সি 4 স্টোর

উত্তর:


111

কেস ক্লাসগুলি নিয়মিত ক্লাসগুলির মধ্যে পৃথক হয় সেগুলি থেকে পৃথক:

  1. প্যাটার্ন ম্যাচিং সমর্থন
  2. এর ডিফল্ট বাস্তবায়ন equalsএবংhashCode
  3. সিরিয়ালাইজেশন ডিফল্ট বাস্তবায়ন
  4. এর একটি সুন্দর ডিফল্ট বাস্তবায়ন toString, এবং
  5. ক্রিয়াকলাপের স্বল্প পরিমাণ যা তারা স্বয়ংক্রিয়ভাবে উত্তরাধিকার সূত্রে প্রাপ্ত হয় scala.Product

প্যাটার্ন ম্যাচিং, সমান এবং হ্যাশকোড সিঙ্গলটনের জন্য খুব বেশি গুরুত্ব দেয় না (যদি আপনি সত্যিকার অর্থে কিছুটা অবনমিত করেন না) তবে আপনি কেবলমাত্র সিরিয়ালাইজেশন পেয়ে যাচ্ছেন, একটি দুর্দান্ত toStringএবং কিছু পদ্ধতি যা আপনি সম্ভবত ব্যবহার করবেন না।


46
এই উত্তরের পয়েন্ট 3 এবং 4 হ'ল কেস অবজেক্টস এবং অবজেক্টগুলির মধ্যে সঠিক পার্থক্য। 1 এবং 2 পয়েন্ট সিঙ্গলটন অবজেক্টগুলির জন্য কোনও বিষয় নয়। এবং সিঙ্গলটন অবজেক্টস সর্বদা শালীনতার সাথে পণ্য 0 তাই পয়েন্ট 5 এতে গুরুত্বপূর্ণ নয়।
Wojciech Durczyński

86
এই পোস্টটি objectএকটি সিঙ্গলটনের মতো একই রূপকথার জন্ম দেয়। এইটা না. বরং এটি হ'ল এটি যা বলে তা হ'ল একটি বস্তু, মানে একটিতে ঘোষণা এবং তাত্পর্য। এটি objectপ্যাকেজ স্কোপে সংজ্ঞায়িত করা হলে এটি একক ক্ষেত্রে সীমাবদ্ধ করে, যা কার্যকরভাবে এটিকে সিঙ্গেলটন করে তোলে, তবে কেবলমাত্র স্কোপে সংজ্ঞায়িত হয়। যদি কোনও শ্রেণীর অভ্যন্তরে সংজ্ঞায়িত করা হয় তবে আপনার নিজের বর্গের মতো অনেকগুলি উদাহরণ থাকতে পারে (এটি অলসভাবে ইনস্ট্যান্টেশনযুক্ত, সুতরাং এটি অগত্যা 1-1 নয়)। এবং এই অভ্যন্তরীণ অবজেক্টগুলি হ্যাশ কী হিসাবে খুব ভাল ব্যবহার করা যেতে পারে, ডিফল্ট সমান / হ্যাশকোডকে খুব বুদ্ধিমান করে তোলে।
নীলস্কে

66
প্রশ্নটি case objectশ্রেণি নয়, কেন এটি সঠিক উত্তর?
আইএক্সএক্স

10
এটি প্রশ্নের উত্তর দেয় না। এই উত্তরটি case classএবং এ এর মধ্যে পার্থক্য নিয়ে কাজ করে class। প্রশ্ন মধ্যে পার্থক্য সম্পর্কে case objectএবং object
এমকে

6
@ সি 4 স্টোর উত্তর যদিও তা বলে না। কোনও বস্তু শ্রেণি নয়। স্ক্যালার বিভিন্ন প্রান্তের কেস এবং জটিলতাগুলি দেখার কারণে কেস ক্লাসগুলি পর্দার আড়ালে যথেষ্ট পরিমাণে যাদু করে Give স্ট্যান্ডার্ড ক্লাস এবং কেস ক্লাসের মধ্যে। এই উত্তরটি এমনকি প্রশ্নের শব্দটিকেও সম্বোধন করে না।
ব্রুস

137

এখানে একটি পার্থক্য - কেস অবজেক্টস Serializableবৈশিষ্ট্যটি প্রসারিত করে , তাই সেগুলি ক্রমিকায়িত করা যায়। নিয়মিত বস্তুগুলি ডিফল্টরূপে পারে না:

scala> object A
defined module A

scala> case object B
defined module B

scala> import java.io._
import java.io._    

scala> val bos = new ByteArrayOutputStream                                            
bos: java.io.ByteArrayOutputStream =  

scala> val oos = new ObjectOutputStream(bos)                                          
oos: java.io.ObjectOutputStream = java.io.ObjectOutputStream@e7da60                   

scala> oos.writeObject(B)

scala> oos.writeObject(A)
java.io.NotSerializableException: A$

15
আমি মনে করি যে কেস অবজেক্টগুলি
ক্রিয়াকলাপযুক্ত করা

14
যোগ extends Serializableকরা একই কৌশল করা উচিত।
নীলস্কেপ

36
scala> object foo

সংজ্ঞায়িত বস্তু foo

scala> case object foocase

সংজ্ঞায়িত অবজেক্ট ফোকাস

ক্রমিকায়নের পার্থক্য:

scala> foo.asInstanceOf[Serializable]

java.lang.ClassCastException: foo বিন্যাস $ scala.Serializable কাস্ট করা যাবে না
... 43 লুপ্ত

scala> foocase.asInstanceOf[Serializable]

res1: সিরিয়ালাইজযোগ্য = ফোকাস

টু স্ট্রিং পার্থক্য:

scala> foo

res2: foo.type = foo 7 @ 7bf0bac8

scala> foocase

res3: foocase.type = ফোকাস


2

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


0

এটি এর সাথে একই রকম case classএবং অতিরিক্ত রাষ্ট্রের তথ্য উপস্থাপনের ক্ষেত্রগুলি না থাকলে classআমরা কেবল তার case objectপরিবর্তে ব্যবহার করি case class


0

আমরা বস্তু এবং "কেস ক্লাস" এর আগে জানি। তবে "কেস অবজেক্ট" হ'ল উভয়ের মিশ্রণ, এটি কোনও বস্তুর অনুরূপ সিঙ্গলটন এবং কেস ক্লাসের মতো প্রচুর বয়লারপ্লেট সহ। পার্থক্যটি কেবল হ'ল বয়লারপ্লেট কোনও শ্রেণীর পরিবর্তে কোনও বস্তুর জন্য করা হয়।

কেস অবজেক্টগুলি নীচেরগুলির সাথে আসে না:

প্রয়োগ, আন-প্রয়োগ পদ্ধতি। এখানে কোনও অনুলিপি পদ্ধতি নেই কারণ এটি একটি সিঙ্গলটন। কাঠামোগত সাম্য তুলনা জন্য কোন পদ্ধতি। পাশাপাশি কোনও নির্মাণকারীও নেই।

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