কম্পিউটার

রুবিতে ডুপ বনাম ক্লোন:পার্থক্য বোঝা

আপনি কি জানেন যে আপনি রুবিতে একটি বস্তু অনুলিপি করতে পারেন? শুধু তাই নয়, এটি করার জন্য দুটি ভিন্ন পদ্ধতি রয়েছে!

এই পদ্ধতিগুলি হল :

  • dup
  • clone

আমরা কিছুক্ষণের মধ্যে পার্থক্যগুলি অন্বেষণ করব, তবে প্রথমে…

কেন আপনি একটি বস্তু ক্লোন করতে চান ?

রুবিতে অনেকগুলি বস্তু পরিবর্তনযোগ্য, আপনি সেগুলি পরিবর্তন করতে পারেন৷

আপনি যদি একটি বস্তু পরিবর্তন করতে চান তবে মূলটির একটি অনুলিপি রাখুন তারপর আপনি এটি ক্লোন করতে পারেন।

উদাহরণস্বরূপ।

আপনি প্রথমটি ছাড়া সমস্ত উপাদান সহ একটি অ্যারে চাইতে পারেন৷

এটি করার একটি উপায় :

a =[1,2,3,4,5]a[1..-1]# [2,3,4,5]

অন্য উপায় হবে :

b =a.cloneb.shift# [1]b# [2,3,4,5]

উভয় উদাহরণ আপনাকে মূল অ্যারে রাখার অনুমতি দেয়৷

রুবিতে ডুপ বনাম ক্লোন:পার্থক্য বোঝা

হিমায়িত বস্তু

ডুপ এবং ক্লোন একে অপরের একটি উপনাম নয় যেমন এটি অন্যান্য রুবি পদ্ধতিতে ঘটে (মানচিত্র/সংগ্রহ), তাদের মধ্যে কয়েকটি ছোট পার্থক্য রয়েছে।

সমতা এবং পার্থক্য অন্বেষণ করা দুটি জিনিসের মধ্যে আপনার বোঝার উন্নতি করার একটি দুর্দান্ত উপায় .

উভয় পদ্ধতি একটি বস্তু অনুলিপি, পার্থক্য হল যে dup বস্তুর গুণাবলী অনুলিপি করে না।

কোন বস্তুর বৈশিষ্ট্য?

  • হিমায়িত অবস্থা
  • কলঙ্কিত অবস্থা
  • সিঙ্গলটন ক্লাস

এখানে একটি উদাহরণ আছে :

a =Object.new.freezeb =a.dupb.frozen?# falseb =a.cloneb.frozen?# সত্য

Ruby 2.4 এ clone এর জন্য একটি বিকল্প রয়েছে ক্লোন করা বস্তুর হিমায়িত অবস্থা উপেক্ষা করতে।

উদাহরণ :

a.clone(freeze:true)a.clone(freeze:false)

গভীর বনাম অগভীর অনুলিপি

চোখের সাথে মিলিত হওয়ার চেয়ে একটি বস্তুর অনুলিপি করার আরও অনেক কিছু আছে।

যখন আপনি dup দিয়ে একটি অনুলিপি তৈরি করেন অথবা clone , আপনি একটি অগভীর অনুলিপি তৈরি করছেন৷ .

এর মানে হল যে অন্যান্য বস্তুর মধ্যে থাকা বস্তুগুলি অনুলিপি করা হবে না।

অন্য কথায় :

আপনার যদি স্ট্রিংগুলির একটি অ্যারে থাকে তবে শুধুমাত্র অ্যারেটি কপি করা হবে, স্ট্রিংগুলি নয়৷

নিজের জন্য দেখুন:

অরিজিনাল =%w(আপেল কমলা কলা) কপি =original.cloneoriginal.map(&:object_id)# [23506500, 23506488, 23506476]copy.map(&:object_id)# [23506500, 5362, 532, 536] প্রাক> 

অ্যারে ক্লোন করার পরেও অবজেক্ট আইডি একই থাকে, তাই আমাদের কাছে একই স্ট্রিং রয়েছে।

আপনি এটি দিয়ে সমাধান করতে পারেন:

strings.clone.map(&:clone)

এর ফলে অ্যারে এবং স্ট্রিং উভয়ই ক্লোন হচ্ছে, কিন্তু লক্ষ্য করুন যে এটি শুধুমাত্র এক স্তরের গভীরে যায়। আপনি বিকল্প হিসেবে ActiveSupport থেকে deep_dup পদ্ধতি ব্যবহার করে দেখতে পারেন।

সারাংশ

আপনি রুবিতে বস্তুর ক্লোনিং সম্পর্কে শিখেছেন! ডুপ এবং ক্লোন পদ্ধতি এবং অগভীর অনুলিপি বনাম গভীর অনুলিপির মধ্যে পার্থক্য সহ।

পড়ার জন্য ধন্যবাদ!


  1. রুবির সাথে সিলেকশন সর্ট বোঝা

  2. রুবিতে সন্নিবেশ বাছাই বোঝা

  3. পুট, প্রিন্ট এবং পি এর মধ্যে পার্থক্য বোঝা

  4. রুবিতে ডেকোরেটর ডিজাইন প্যাটার্ন