Was macht Module.private_constant? Gibt es eine Möglichkeit, nur private Konstanten aufzulisten?

8

Ab Ruby 1.9.3 können wir private Konstanten erstellen:

%Vor%

Gibt es eine gute Dokumentation darüber, was dies bewirkt? Gibt es eine Möglichkeit, die Namen von nur privaten Konstanten zu erhalten, die dem Aufruf von constants

ähnlich sind?     
sawa 17.10.2012, 22:51
quelle

2 Antworten

3

Ab Ruby 2.1, während Module#constants nur öffentliche Konstanten enthält, wenn Sie inherit=false setzen, erhalten Sie auch private Konstanten. Wenn Sie also eine Konstante in constants(false) , aber nicht in constants finden (und Sie interessieren sich nicht für geerbte Konstanten), könnte dies eine mehr oder weniger zuverlässige Methode sein, um zu erkennen, ob sie privat ist.

%Vor%

Das ist undokumentiert, und ich bin mir nicht sicher, ob es beabsichtigt ist, aber empirisch funktioniert es. Ich würde es mit Unit Tests untermauern.

Update: Es sieht so aus, als wäre ein Bug in Ruby und könnte es sein verschwinden in einer zukünftigen Version.

    
David Moles 03.05.2016, 19:48
quelle
9

Es gibt keine privaten Konstanten bis Ruby 1.9.3. Um eine Liste aller Konstanten zu erhalten, können Sie einfach #constants verwenden.

%Vor%

Ab 1.9.3 wurde .private_constant hinzugefügt, aber da nichts wirklich privat ist, können Sie ...

tun %Vor%

Ich glaube nicht, dass es eine Möglichkeit gibt, eine Liste aller privaten Konstanten zu erhalten, aber Sie können trotzdem das Vorhandensein eines bestimmten Namens testen.

%Vor%     
thoferon 17.10.2012 23:19
quelle

Tags und Links