একটি শ্রেণীর ধ্রুবক অ্যাক্সেস


142

আমার যখন নিম্নলিখিতগুলি রয়েছে:

class Foo
   CONSTANT_NAME = ["a", "b", "c"]

  ...
end

এর সাথে অ্যাক্সেস করার কোনও উপায় আছে Foo::CONSTANT_NAMEবা মানটি অ্যাক্সেস করার জন্য আমাকে কি ক্লাস পদ্ধতি তৈরি করতে হবে?

উত্তর:


244

আপনি যা পোস্ট করেছেন তা পুরোপুরি কাজ করা উচিত:

class Foo
  CONSTANT_NAME = ["a", "b", "c"]
end

Foo::CONSTANT_NAME
# => ["a", "b", "c"]

2
হুম, আমি আগে পরীক্ষা করার সময় অবশ্যই ভুল টাইপ করেছি। উফস :)
— জেরেমি স্মিথ

12
এটি সত্যিকার অর্থে একটি ধ্রুবক হওয়ার জন্য, মানটির শেষে একটি। ফ্রিজ যুক্ত করতে ভুলবেন না! CONSTANT_NAME = ["a", "b", "c"].freeze
— mutexkid

6
সর্বদা মিশ্রিত ::এবং .;)
— নিক

বড় হাতের
— মাইকেল ইয়িন

42

আপনি যদি আপনার শ্রেণীর মধ্যে অতিরিক্ত কোড লিখছেন যা ধ্রুবক থাকে, আপনি এটি একটি বিশ্বব্যাপী হিসাবে আচরণ করতে পারেন।

class Foo
  MY_CONSTANT = "hello"

  def bar
    MY_CONSTANT
  end
end

Foo.new.bar #=> hello

আপনি যদি ক্লাসের বাইরে ধ্রুবকটি অ্যাক্সেস করেন তবে ক্লাসের নামের সাথে এটি উপস্থাপন করুন, তারপরে দুটি কলোন থাকবে

Foo::MY_CONSTANT  #=> hello

42

কিছু বিকল্প:

class Foo
  MY_CONSTANT = "hello"
end

Foo::MY_CONSTANT
# => "hello"

Foo.const_get :MY_CONSTANT
# => "hello"

x = Foo.new
x.class::MY_CONSTANT
# => "hello"

x.class.const_defined? :MY_CONSTANT
# => true

x.class.const_get :MY_CONSTANT
# => "hello"

17

অ্যাক্সেস করার কোনও উপায় আছে Foo::CONSTANT_NAME?

হ্যা এখানে:

Foo::CONSTANT_NAME

আমি যখন এটি অ্যাক্সেস করার চেষ্টা করছি তখন আমার নীচের সতর্কতা রয়েছে। সতর্কতা: ইতিমধ্যে ধ্রুবক টেস্টডাটা সূচনা :: CONSTANT_VAR এই পরিবর্তনশীলটি অন্য কোথাও আরম্ভ করা হয়নি। আমি কেন এই সতর্কতা করছি?
— এএসএম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.