เมื่อฉันมีต่อไปนี้:
class Foo
CONSTANT_NAME = ["a", "b", "c"]
...
end
มีวิธีการเข้าถึงด้วยFoo::CONSTANT_NAME
หรือฉันต้องทำวิธีการเรียนเพื่อเข้าถึงค่าหรือไม่
เมื่อฉันมีต่อไปนี้:
class Foo
CONSTANT_NAME = ["a", "b", "c"]
...
end
มีวิธีการเข้าถึงด้วยFoo::CONSTANT_NAME
หรือฉันต้องทำวิธีการเรียนเพื่อเข้าถึงค่าหรือไม่
คำตอบ:
สิ่งที่คุณโพสต์ควรทำงานอย่างสมบูรณ์:
class Foo
CONSTANT_NAME = ["a", "b", "c"]
end
Foo::CONSTANT_NAME
# => ["a", "b", "c"]
CONSTANT_NAME = ["a", "b", "c"].freeze
::
และ.
;)
หากคุณกำลังเขียนรหัสเพิ่มเติมภายในชั้นเรียนของคุณที่มีค่าคงที่คุณสามารถปฏิบัติกับมันเหมือนโลก
class Foo
MY_CONSTANT = "hello"
def bar
MY_CONSTANT
end
end
Foo.new.bar #=> hello
หากคุณกำลังเข้าถึงค่าคงที่นอกคลาสให้ใส่คำนำหน้าด้วยชื่อคลาสแล้วตามด้วยเครื่องหมายโคลอนสองตัว
Foo::MY_CONSTANT #=> hello
ทางเลือกบางอย่าง:
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"
มีวิธีการเข้าถึง
Foo::CONSTANT_NAME
หรือไม่?
ใช่นั่นคือ:
Foo::CONSTANT_NAME