নীচের চেয়ে আরও কিছু মূর্তিমান কি আছে?
foo.class == String
নীচের চেয়ে আরও কিছু মূর্তিমান কি আছে?
foo.class == String
উত্তর:
আমি মনে করি আপনি খুঁজছেন instance_of?
। is_a?
এবং kind_of?
উত্পন্ন ক্লাস থেকে উদাহরণগুলির জন্য সত্য ফিরে আসবে।
class X < String
end
foo = X.new
foo.is_a? String # true
foo.kind_of? String # true
foo.instance_of? String # false
foo.instance_of? X # true
String
, পাশাপাশি Integer
এবং সাথেও কাজ করবে Float
। এটি কি কাজ করে Decimal
? ( Decimal
আরও একটি হাঁসের-টাইপিং পদ্ধতির বলতে হবে
foo.respond_to?(:to_str)
to_str
ইঙ্গিত দেয় যে কোনও বস্তুর শ্রেণি স্ট্রিংয়ের প্রকৃত বংশধর নাও হতে পারে, তবে বস্তুটি নিজেই খুব বেশি স্ট্রিং-জাতীয় (স্ট্রিং?)।
foo
পারেন হবে true
, false
, অথবা একটি ভ্যানিলা স্ট্রিং, কিন্তু এটা ভালো আরও সাধারণ সমাধান জানতে।
to_str
, নাকি to_s
? দুটো কিছুটা আলাদা।
আপনি করতে পারেন:
foo.instance_of?(String)
এবং আরও সাধারণ:
foo.kind_of?(String)
kind_of
আরও সাধারণ করে তোলে ? তারা সমার্থক বলে মনে: is_a
।
instance_of?
পরিবর্তে আমি বোঝাতে চাইছি is_a?
।
অন্যান্য উত্তরগুলির পাশাপাশি ক্লাসটি কোনও বস্তু that শ্রেণীর উদাহরণ কিনা তা পরীক্ষা করার জন্য === পদ্ধতিটি সংজ্ঞায়িত করে।
আমি মনে করি আরও ভাল উপায় হ'ল কিছু প্রাক্কলিত পদ্ধতি তৈরি করা। এটি আপনার "একক পয়েন্ট অফ কন্ট্রোল" সংরক্ষণ করবে।
class Object
def is_string?
false
end
end
class String
def is_string?
true
end
end
print "test".is_string? #=> true
print 1.is_string? #=> false
আরও হাঁসের টাইপিংয়ের উপায়;)
"string".is_a?(String)
। দেখে মনে হচ্ছে আপনি চাকাটি নতুন করে নিচ্ছেন। এর রয়েছে class
, instance_of
, kind_of
, ইত্যাদি ... বানর প্যাচ থেকে খারাপ ধারণা Object
বর্গ, এটা অপ্রয়োজনীয় এর উল্লেখ নেই।
pre_check("test".is_string?)
এখন আপনার প্রকল্পের প্রয়োজনীয়তা পরিবর্তন হবে এবং তিনটি অক্ষর বা তার বেশি থাকা প্রতিটি স্ট্রিংকে আর স্ট্রিং হিসাবে সংজ্ঞায়িত করা হয়নি (আমি এটি অস্বাভাবিক জানি;)) এখন আপনি সহজেই নিজের পদ্ধতি পরিবর্তন করতে পারবেন।
is_a?
আসলে ব্যবহার করার জন্য আরও উপযুক্ত আইডিয়ম (এবং প্রায়শই অ্যান্ড্রু গ্রিমের উল্লেখের মতো হাঁসের-টাইপিং চেক আরও ভাল)। একটি কঠোর শ্রেণীর তুলনা সাধারণত কোড গন্ধ হয়। en.wikipedia.org/wiki/Liskov_substitution_principle