পার্থক্য কি? আমি কখন ব্যবহার করব? কেন তাদের অনেক আছে?
পার্থক্য কি? আমি কখন ব্যবহার করব? কেন তাদের অনেক আছে?
উত্তর:
kind_of?এবং is_a?সমার্থক।
instance_of?অন্য দুটি থেকে পৃথক যে এটি কেবল তখনই প্রত্যাবর্তন করে trueযখন অবজেক্টটি সঠিক শ্রেণীর উদাহরণ, সাবক্লাস নয়।
উদাহরণ:
"hello".is_a? Objectএবং "hello".kind_of? Objectফিরে আসুন trueকারণ "hello"এটি একটি Stringএবং Stringএকটি সাবক্লাস Object।"hello".instance_of? Objectফেরৎ false।@honda.kind_of? Carএবং @person.is_a? Administrator, রুবি সমস্ত নান্দনিকতা সম্পর্কে। আসলে, ব্যাকরণগত ত্রুটি লক্ষ্য করুন ... সক্রিয় সহায়তায় আপনি লিখতে পারেন @person.is_an? Administrator:) ... এটি সম্ভবত এতক্ষণে এটি রুবি কোরতে পরিণত হয়েছে।
kind_of?কিন্তু না is_a??
is_an?রুবি -১.৯.২-পি0-এ নেই। @ ক্লাদিউ, না। is_a?এর কেবল একটি উপনামkind_of? । উভয় পদ্ধতি একই সি ফাংশন প্রার্থনা rb_obj_is_kind_of,।
kind_of?অগ্রাহ্য ছাড়া is_a?।
is_an?পদ্ধতিটি কোথায় ?! এটি বর্তমান রেল সংস্করণে নেই এবং এটির হ্রাস করা সম্পর্কে আমি গুগলে কিছুই খুঁজে পাচ্ছি না।
পার্থক্য কি?
ডকুমেন্টেশন থেকে:
- - ( বুলিয়ান )
instance_of?(class)- ফেরত পাঠায়
trueযদিobjপ্রদত্ত ক্লাসের একটা নিদর্শন হয়।
এবং:
- - ( বুলিয়ান )
is_a?(class)
- ( বুলিয়ান )kind_of?(class)- রিটার্নস
trueযদিclassএর বর্গobj, অথবা যদিclassএর superclasses একobjবা মডিউল অন্তর্ভুক্তobj।
যদি এটি অস্পষ্ট থাকে তবে ঠিক কী অস্পষ্ট তা জেনে ভাল লাগবে , যাতে ডকুমেন্টেশনটি উন্নত করা যায়।
আমি কখন ব্যবহার করব?
কখনও। পরিবর্তে পলিমারফিজম ব্যবহার করুন।
কেন তাদের অনেক আছে?
আমি দু'জনকে "অনেক" ডাকব না । তাদের মধ্যে দুটি রয়েছে কারণ তারা দুটি ভিন্ন কাজ করে।
এটা আরো বস্তু জিজ্ঞাসা করতে কিনা তারা একটি পদ্ধতি সাড়া আপনার যা দরকার বা না ব্যবহার রুবি-মত হল respond_to?। এটি ন্যূনতম ইন্টারফেস এবং বাস্তবায়ন অজানা প্রোগ্রামিং উভয়কেই অনুমতি দেয়।
এটি অবশ্যই সর্বদা প্রযোজ্য নয়, সুতরাং আপনি যে পদ্ধতিগুলির বিষয়ে জিজ্ঞাসা করছেন সেগুলি ব্যবহার করে "ধরণ" সম্পর্কে আরও রক্ষণশীল বোঝার বিষয়ে জিজ্ঞাসা করার সম্ভাবনা রয়েছে যা শ্রেণি বা বেস শ্রেণি।
আমি দু'জনকেও কল করবো না ( is_a?এবং kind_of?একই পদ্ধতির বিকল্প) তবে আপনি যদি আরও সম্ভাবনা দেখতে চান তবে আপনার মনোযোগটি #classপদ্ধতির দিকে ঘুরিয়ে দিন :
A = Class.new
B = Class.new A
a, b = A.new, B.new
b.class < A # true - means that b.class is a subclass of A
a.class < B # false - means that a.class is not a subclass of A
# Another possibility: Use #ancestors
b.class.ancestors.include? A # true - means that b.class has A among its ancestors
a.class.ancestors.include? B # false - means that B is not an ancestor of a.class
is_a?এবংkind_of?বিদ্যমান তা: আমি মনে করি এটি রুবির ডিজাইনের দর্শনের অংশ part পাইথন বলতেন, কিছু করার একমাত্র উপায় থাকতে হবে; রুবির প্রায়শই সমার্থক পদ্ধতি থাকে যাতে আপনি যেটিকে আরও ভাল লাগে তা ব্যবহার করতে পারেন। এটা পছন্দসই বিষয়। এটি আংশিকভাবে জাপানের প্রভাবের কারণে হতে পারে: আমাকে বলা হয়েছে যে তারা বাক্যটিকে আরও সুন্দর করে তুলতে বাক্যটির উপর নির্ভর করে একই সংখ্যার জন্য আলাদা শব্দ ব্যবহার করবে। মাত্জ এই ধারণাটি তাঁর ভাষার নকশায় নিয়ে যেতে পারেন।