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


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.