2016-05-03 20 views
7

Ruby 2.0 ya da öyleyse, private_constant kullanarak sabit bir özel yapmak mümkün oldu, sabit doğrudan bildirim modülünün dışında kullanılırsa bir hatayla sonuçlanır. Ancak, constants ve const_defined? ve const_defined? yine de özel sabitleri döndürür ve const_get bunlara erişime izin verir. Özel sabitleri programatik olarak tanımlamanın ve çalışma zamanında filtrelemenin bir yolu var mı?Yalnızca halka üzerinde yineleyin Açık Ruby sabitleri


Güncelleme:

() What does Module.private_constant do? Is there a way to list only private constants? ve cevabının özel olarak bu davayı ele almazlarsa, daha ziyade ters (nasıl sadece özel sabitleri listelemek için unutmayın.): ​​ O sanki görünüyor Ruby 1.9 ve 2.0'da, constants sadece kamu sabitlerini içermiştir. 2.1'den itibaren, constants no'lu argüman hala sadece halka sabitleri içerir, ancak constants(false) ile inheritfalse'a ayarlanması (yani, sadece bu modülde tanımlanan sadece bu modülde tanımlanan sabitleri listeler) özel sabitleri açığa çıkarmanın yan etkisine sahiptir.

sonraki arada sabitleri belirleyebilir
+0

Olası yinelenen http://stackoverflow.com/questions/12944616/what-does-module-private-constant-do-is-there-a - sadece-liste-özel-özel- –

+0

Onlar hala tanımlanmıştır. Ruby'nin yalan söylemesini ister misin? – tadman

+1

Sorunu Ruby 2.1.4: '2.1.4: 001> Foo modülünde çoğaltmıyorum; X = 1; Y = 2; private_constant: Y; son; Foo.constants'ı döndürür [: X] ' –

cevap

4

: ait

class A 
    C = "value" 
    private_constant :C 
    C2 = "value2" 
end 

A.constants #public constants 
#=> [:C2] 
A.constants(false) #public & private constants 
#=> [:C, :C2] 
A.constants(false) - A.constants #private constants 
#=> [:C] 
+0

OP, özel olmayan sabitlerin dizisini ister ve sabitler yönteminin * tüm * sabitleri döndürdüğünü söyler (özel sabitleri filtrelemek isterler). Buna katılıyorum ki, bu çalışma ve aynı zamanda “A.constants” ın beklediği gibi [: C2] ve OP'nin istediği gibi - OP'nin asıl sorununun ne olduğundan tam olarak emin olmadığına katılıyorum. –

+0

@NeilSlater, 'Cevaplar özel olarak tanımlamak için bir yol var mı?' Cevap – Ilya

+0

Yeni düzenleme tüm olası yolları gösterir. Bununla tartışamam. :-) Neden bu soru OP için işe yaramadığını merak ediyorum? –

İlgili konular