আপনি কি জানেন যে আপনি রুবিতে একটি বস্তু অনুলিপি করতে পারেন? শুধু তাই নয়, এটি করার জন্য দুটি ভিন্ন পদ্ধতি রয়েছে!
এই পদ্ধতিগুলি হল :
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 পদ্ধতি ব্যবহার করে দেখতে পারেন।
সারাংশ
আপনি রুবিতে বস্তুর ক্লোনিং সম্পর্কে শিখেছেন! ডুপ এবং ক্লোন পদ্ধতি এবং অগভীর অনুলিপি বনাম গভীর অনুলিপির মধ্যে পার্থক্য সহ।
পড়ার জন্য ধন্যবাদ!