2016-05-03 9 views
7

रूबी 2.0 या उसके बाद से, private_constant का उपयोग करके निरंतर निजी बनाना संभव हो गया है, जिसके परिणामस्वरूप निरंतर घोषित मॉड्यूल के बाहर सीधे उपयोग किया जाता है।केवल रूबी स्थिरांक

हालांकि, constants और const_defined? अभी भी निजी स्थिरांक लौटाते हैं, और const_get उन तक पहुंच की अनुमति देता है। प्रोग्रामिंग रूप से निजी स्थिरांक की पहचान करने और रन टाइम पर उन्हें फ़िल्टर करने का कोई तरीका है?

(नोट: What does Module.private_constant do? Is there a way to list only private constants? और उसके जवाब विशेष रूप से इस मामले का पता नहीं है, बल्कि रिवर्स (कैसे केवल निजी स्थिरांक सूची)।)


अद्यतन: हालांकि यह रूप में लग रहा है रूबी 1.9 और 2.0 में, constants में केवल सार्वजनिक स्थिरांक शामिल थे। 2.1 के रूप में, नो-एर्ग constants में अभी भी केवल सार्वजनिक स्थिरांक शामिल हैं, लेकिन inheritfalseconstants(false) (यानी, इस मॉड्यूल में परिभाषित केवल स्थिरांक सूचीबद्ध करें, अपने पूर्वजों के मॉड्यूल में नहीं) को निजी स्थिरांक को उजागर करने का दुष्प्रभाव है।

+0

की संभावित डुप्लिकेट http://stackoverflow.com/questions/12944616/what-does-module-private-constant-do-is-there-a -वे-टू-लिस्ट-केवल-निजी-कॉन्स्टा –

+0

वे अभी भी परिभाषित हैं। क्या आप रूबी झूठ बोलना चाहते हैं? – tadman

+1

मैं रूबी 2.1.4 में आपकी समस्या की प्रतिलिपि नहीं बना रहा हूं: '2.1.4: 001> मॉड्यूल फू; एक्स = 1; वाई = 2; private_constant: वाई; समाप्त; Foo.constants 'रिटर्न' [: X] ' –

उत्तर

4

आप अगले वैसे स्थिरांक की पहचान कर सकते हैं:

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

ओपी गैर-निजी स्थिरांक की सरणी चाहता है, और कह रहा है कि 'स्थिरांक' विधि * सभी * स्थिरांक लौटाती है (वे निजी स्थिरांक को फ़िल्टर करना चाहते हैं)। हालांकि, मैं इस बात से सहमत हूं कि यह काम करता है, और 'एंकस्टेंट' 'अपेक्षित के रूप में' [: C2] 'देता है - और ओपी क्या चाहता है - इसलिए पूरी तरह से सुनिश्चित नहीं है कि ओपी की वास्तविक समस्या क्या है। –

+0

@NeilSlater, मैंने जवाब पर उत्तर दिया 'क्या प्रोग्रामिक रूप से निजी स्थिरांक की पहचान करने का कोई तरीका है?' – Ilya

+0

नया संपादन सभी संभावित तरीकों से पता चलता है। इसके साथ बहस नहीं कर सकता :-) मुझे आश्चर्य है कि सवाल क्यों कहता है कि यह ओपी के लिए काम नहीं करता है? –

संबंधित मुद्दे