সাম্য পদ্ধতিতে নবীনদের সমস্যা হবে :
- a == খ : a এবং b সমান কিনা তা পরীক্ষা করে। এটি সবচেয়ে দরকারী।
- a.eql? b : a এবং b সমান কিনা তাও পরীক্ষা করে তবে এটি কখনও কখনও আরও কঠোর হয় (উদাহরণস্বরূপ এটি এবং এবং বি একই ধরণের রয়েছে কিনা তা পরীক্ষা করতে পারে)। এটি প্রধানত হ্যাশগুলিতে ব্যবহৃত হয়।
- a.equal? b : a এবং b একই বস্তু (পরিচয় চেক) কিনা তা যাচাই করে।
- a === খ : ক্ষেত্রে বিবৃতিতে ব্যবহৃত (আমি এটি " একটি ম্যাচ বি " হিসাবে পড়েছি )।
এই উদাহরণগুলির মধ্যে প্রথম 3 টি পদ্ধতি পরিষ্কার করা উচিত:
a = b = "joe"
a==b # true
a.eql? b # true
a.equal? b # true (a.object_id == b.object_id)
a = "joe"
b = "joe"
a==b # true
a.eql? b # true
a.equal? b # false (a.object_id != b.object_id)
a = 1
b = 1.0
a==b # true
a.eql? b # false (a.class != b.class)
a.equal? b # false
নোট যে == , একল? এবং সমান? সর্বদা প্রতিসম হতে হবে: যদি a == খ তারপর খ == ক।
এছাড়াও নোট করুন == এবং একল? উভয়ই ক্লাস অবজেক্টে ইক্যুইটি অবহিত হিসাবে প্রয়োগ করা হয়? , সুতরাং আপনি যদি একটি নতুন শ্রেণি তৈরি করেন এবং == এবং একল চান ? সরল পরিচয় ব্যতীত অন্য কিছু বোঝার জন্য আপনাকে তখন উভয়কেই ওভাররাইড করতে হবে। উদাহরণ স্বরূপ:
class Person
attr_reader name
def == (rhs)
rhs.name == self.name # compare person by their name
end
def eql? (rhs)
self == rhs
end
# never override the equal? method!
end
=== পদ্ধতি ভিন্নভাবে আচরণ করে। প্রথমত এটি প্রতিসম নয় (a === b যে খ === ক বোঝায় না )। আমি যেমন বলেছি, আপনি a === b "" ম্যাচ বি "হিসাবে পড়তে পারেন। এখানে কিছু উদাহরণ আছে:
# === is usually simply an alias for ==
"joe" === "joe" # true
"joe" === "bob" # false
# but ranges match any value they include
(1..10) === 5 # true
(1..10) === 19 # false
(1..10) === (1..10) # false (the range does not include itself)
# arrays just match equal arrays, but they do not match included values!
[1,2,3] === [1,2,3] # true
[1,2,3] === 2 # false
# classes match their instances and instances of derived classes
String === "joe" # true
String === 1.5 # false (1.5 is not a String)
String === String # false (the String class is not itself a String)
কেস বিবৃতি উপর ভিত্তি করে তৈরি === পদ্ধতি:
case a
when "joe": puts "1"
when 1.0 : puts "2"
when (1..10), (15..20): puts "3"
else puts "4"
end
এর সমতুল্য:
if "joe" === a
puts "1"
elsif 1.0 === a
puts "2"
elsif (1..10) === a || (15..20) === a
puts "3"
else
puts "4"
end
আপনি যদি কোনও নতুন শ্রেণীর সংজ্ঞা দেন যার উদাহরণস্বরূপ কোনও ধরণের ধারক বা ব্যাপ্তি উপস্থাপন করে (যদি এর কোনও কিছু অন্তর্ভুক্ত? বা ম্যাচ? পদ্ধতি) থাকে তবে আপনি এই জাতীয় === পদ্ধতিটিকে ওভাররাইড করতে দরকারী হতে পারেন:
class Subnet
[...]
def include? (ip_address_or_subnet)
[...]
end
def === (rhs)
self.include? rhs
end
end
case destination_ip
when white_listed_subnet: puts "the ip belongs to the white-listed subnet"
when black_listed_subnet: puts "the ip belongs to the black-listed subnet"
[...]
end