ruby ​​:: Modul oder nur Modul

8

Ich gehe langsam durch die Rails-Quelle, um Rubin und Rails im Allgemeinen besser zu halten. In der folgenden Rails-Klasse test_case.rb

Die Zeile ist

%Vor%

und ich habe mich gefragt, ob es irgendeinen Unterschied gibt, das folgende zu tun

%Vor%

Es mag trivial erscheinen, aber diese Dinge spielen eine neue Sprache aus. Die Tests laufen immer noch für ActiveSupport, wenn ich das führende :: :: entfernen, was es tut ...: P

    
npiv 15.05.2011, 21:20
quelle

2 Antworten

8

::Test stellt sicher, dass Sie ein Toplevel-Modul mit dem Namen Test erhalten.

Der letztere Fall ( Test::Unit::TestCase ) stellt nicht sicher, dass Test ein Toplevel-Modul ist, beispielsweise eine Klasse. Es bedeutet, dass es die meiste Zeit funktioniert, aber Sie könnten es versehentlich brechen.

    
ctide 15.05.2011, 21:24
quelle
5

Stellen Sie sich vor, Sie haben diesen Code

%Vor%

Dies würde zu einem Fehler führen, da Ihre Testkonstante für die Klasse, die Sie erstellen, keine Unit-Konstante enthält. Wenn Sie es mit :: ansprechen, ist das wie der führende Schrägstrich in einem Pfad.

Es gibt auch einen speziellen Fall für die Verwendung dieser - Sie können Ihren Code in etwas anderem als dem Standard-Root-Namespace auswerten, und Sie brauchen dann den doppelten Doppelpunkt, um Klassen wie :: Object zu adressieren (normalerweise, um sie zu monkeyypatch).

    
Julik 15.05.2011 21:51
quelle

Tags und Links