রুবিতে ক্লাস এবং ক্লাসের মধ্যে পার্থক্য কী?


112

ক্লাস এবং ক্লাসের মধ্যে পার্থক্য কী?


1
পরেরটা কোথায় দেখলে?
দারিন দিমিত্রভ

18
klassসাধারণভাবে একটি পরিবর্তনশীল যে একটি ঝুলিতে নাম ব্যবহার করা হয় Class(স্মরণ কর শ্রেণীর বস্তু খুব) বস্তু, হিসাবে klass = String। আরও গভীর ব্যাখ্যার জন্য আপনি যেখানে এটি দেখেছেন তার উত্স সরবরাহ করতে পারেন?
চুবাস

5
না, আমি একটি একক উত্স সরবরাহ করতে চাই না কারণ আমি এটির মতো ব্যাখ্যা করতে চাই না। আমি
এটিতে

5
কখনও কখনও লোকেরা এর clazzপরিবর্তে ব্যবহার করে klass(উদাহরণস্বরূপ, "মেটাগ্রোগ্রামিং রুবি" বইয়ে)।
অ্যান্ড্রু গ্রিম

2
টিভি ট্রপগুলিতে এটিকে "এক্সট্রিম কুল লেটারজ" বলা হবে (কোনও লিঙ্ক নেই - উত্পাদনশীলতা নিরাপদ নয়)।
অ্যান্ড্রু গ্রিম

উত্তর:


188

classএকটি নতুন শ্রেণি সংজ্ঞায়িত করতে ব্যবহৃত একটি কীওয়ার্ড। যেহেতু এটি একটি সংরক্ষিত কীওয়ার্ড, আপনি এটি পরিবর্তনশীল নাম হিসাবে ব্যবহার করতে পারছেন না। আপনি পরিবর্তনশীল নাম রুবি এর কীওয়ার্ড কোনো ব্যবহার করতে পারবেন না, তাই আপনি নামে ভেরিয়েবল আছে সক্ষম হবে না defবা moduleবা ifবা end, ইত্যাদি - classকোন ভিন্ন।

উদাহরণস্বরূপ, নিম্নলিখিত বিবেচনা করুন:

def show_methods(class)
  puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"

আপনি classকোনও পরিবর্তনশীল নাম হিসাবে ব্যবহার করতে পারবেন না বলে একটি ত্রুটিতে এই ফলাফলগুলি চালনার চেষ্টা করছেন ।

test.rb:1: syntax error, unexpected kCLASS, expecting ')'
    def show_methods(class)
                          ^
test.rb:2: syntax error, unexpected ')'
      puts Object.const_get(class).methods.inspect

এটি ঠিক করতে, আমরা klassপরিবর্তে সনাক্তকারী ব্যবহার করব । এটি বিশেষ নয়, আপনি যখন কোনও শ্রেণি বা শ্রেণীর নামের সাথে ডিল করছেন তখন এটি প্রচলিতভাবে পরিবর্তনশীল নাম হিসাবে ব্যবহৃত হয়। এটি ফোনেটিকালি একই, তবে যেহেতু এটি কোনও সংরক্ষিত কীওয়ার্ড নয়, রুবিতে এটির কোনও সমস্যা নেই।

def show_methods(klass)
  puts Object.const_get(klass).methods.inspect
end

show_methods "Kernel"

আউটপুট, প্রত্যাশিত হিসাবে, হয়

["method", "inspect", "name", "public_class_method", "chop!"...

আপনি সেখানে যে কোনও (অ-সংরক্ষিত) ভেরিয়েবল নাম ব্যবহার করতে পারেন তবে সম্প্রদায়টি এটি ব্যবহার করে নিয়েছে klass। এটির কোনও বিশেষ যাদু নেই - এর অর্থ কেবল "আমি এখানে 'শ্রেণি' নামটি ব্যবহার করতে চেয়েছিলাম, তবে আমি এটি করতে পারি না, কারণ এটি একটি সংরক্ষিত কীওয়ার্ড"।

পার্শ্ব নোটে, যেহেতু আপনি এটি কয়েকবার ভুল টাইপ করেছেন, তাই রুবিতে বিষয়টি লক্ষ্য করার মতো। বড় হাতের অক্ষর দিয়ে শুরু হওয়া টোকেনগুলি ধ্রুবক। পিক্যাক্সের মাধ্যমে :

একটি ধ্রুবক নাম শুরু হয় বড় অক্ষর দিয়ে এবং তার পরে নামের অক্ষর। শ্রেণীর নাম এবং মডিউল নামগুলি ধ্রুবক এবং ধ্রুবক নামকরণের কনভেনশনগুলি অনুসরণ করে। কনভেনশন দ্বারা, ধ্রুবক ভেরিয়েবলগুলি সাধারণত বড় হাতের অক্ষর এবং জুড়ে আন্ডারস্কোর ব্যবহার করে বানান করা হয়।

সুতরাং, সঠিক বানান হয় classএবং klassবদলে, Classএবং Klass। দ্বিতীয়টি ধ্রুবক এবং উভয়ই হবে Classএবং Klassবৈধ ধ্রুবক নাম তবে আমি তাদের পরিষ্কার করার উদ্দেশ্যে ব্যবহার করার বিরুদ্ধে সুপারিশ করব।


7
ওয়েল, কেবলমাত্র Classএকটি বৈধ ধ্রুবক নামই নয়, এটি একটি বিদ্যমান নামও! (এটা ক্লাস বর্গ)
আশেরা

1
বাহ, সুন্দর। পুরোপুরি এখন বুঝতে। ধন্যবাদ ক্রিস! :)
ততেনগাহ

1
আমি মনে করি যে klassস্থানীয় ভেরিয়েবল হিসাবে ব্যবহার পিকেক্স থেকে আসে - তারা এখানে কিছু কারণ বর্ণনা করেছেন, উদাহরণ হিসাবে তারা কয়েকটি উদাহরণ ব্যবহার করেছেন।
কেন ব্লুম

এটি অবশ্যই পুরাতন রুবি সংস্করণ প্রয়োগ করতে হবে। রুবি 1.9.3 সহ আমি ব্যবহার করিobject_instance.class.name == 'Object'
আগস্টিন রিডিংগার

না, এটি এখনও সঠিক। অবজেক্ট.নিউয়ের ক্লাসটি অবজেক্ট, তবে অবজেক্টের ক্লাস হ'ল ক্লাস is
ক্রিস হিল্ড

22

klassএটি একটি রেল (বা বরং অ্যাক্টিভেকর্ড) পদ্ধতিও । এটি কোনও সমিতির ক্লাস পাওয়ার জন্য ব্যবহৃত হয়।

লিঙ্কযুক্ত সামগ্রীতে যেমন বলা হয়েছে:

class Author < ActiveRecord::Base
  has_many :books
end

Author.reflect_on_association(:books).klass
# => Book

12

klassএবং clazzএবং claszএর মতো সৃজনশীল ভুল বানানগুলি কোনও সংরক্ষিত শব্দের পেতে ব্যবহৃত হয় class

এটি ব্যবহার করতে class1বা clবা classXবা উদ্দেশ্যমূলক ভুল বানানের পরিবর্তে কিছুটা কম ঝাঁকুনির মতো হবে ।


5

একটি শ্রেণীর নাম এবং অন্যটি ডিফল্টরূপে কেবল একটি অপরিজ্ঞাত ধ্রুবক। এবং এই জুটির জন্য আপনার আরও বেশি দেখা হওয়ার সম্ভাবনা রয়েছে classএবং klassপূর্ববর্তীটি ক্লাসগুলি সংজ্ঞায়িত করার জন্য একটি মূলশব্দ যেখানে দ্বিতীয়টি কেবল একটি সনাক্তকারী (অন্য কোনও অক্ষরের অক্ষরের মতো)। আপনি যখন "শ্রেণি" শব্দটি লিখতে চান এটি ব্যবহার করা হয় তবে এটি সংরক্ষিত কীওয়ার্ড না হওয়ায় করতে পারে না।


বিন্দুটি কী, আমি কেন / কীভাবে এটি ব্যবহার করব, এটি সাধারণত কীসের জন্য ব্যবহৃত হয়?
ততদিনে

3
@ সাম শ্রেণি ক্লাস নির্ধারণের জন্য একটি সংরক্ষিত কীওয়ার্ড। সুতরাং আপনি যদি জেনেরিক ক্লাসের সাথে কিছু রূপান্তর করতে চান (যেমন রূপক), আপনি লিখতে পারবেন না class = Kernel.const_get(class_name)। তবে আপনি লিখতে পারেন klass = Kernel.const_get(class_name), এবং এটি "শ্রেণি" উপস্থাপন করতে ব্যবহৃত হয়।
থিয়াগো সিলভিরা

2
মুল বক্তব্যটি হ'ল আপনি 'শ্রেণি' শব্দটি 'শ্রেণি' বোঝাতে ব্যবহার করতে পারবেন না ... কারণ এটি একটি সংরক্ষিত শব্দ (বিজ্ঞপ্তিযুক্ত যুক্তি, আমি জানি) সুতরাং এর পরিবর্তে 'ক্লাস' শব্দটি প্রতিস্থাপিত হয়েছে। এটি অন্যান্য অনেক ভাষায় একটি সাধারণ প্রতিমা, যেমন জাভা এবং সি #।
স্কট

সুতরাং আপনি কি গতিশীল ক্লাস বরাদ্দ করতে পারেন? ক্লাস = অবজেক্ট.ক্লাস; Klass.new - এরকমই কিছু
তারপরেনগাহ

3
@ সাম: এর Klassজন্য ব্যবহার করা একটি দুর্বল পছন্দ হবে, যেহেতু বড় হাতের অক্ষর দিয়ে শুরু করা শনাক্তকারীরা ধ্রুবক, তাই আপনি কেবল এটি একবার সেট করতে পারেন। তবে হ্যাঁ, এটি সাধারণ ধারণা।
চক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.