Unterschiedliches Verhalten bei der Initialisierung des F # -Moduls

8

Ich habe das folgende F # -Programm:

%Vor%

Mit MyModule ist:

%Vor%

Dies erzeugt die folgende Ausgabe:

%Vor%

Wenn ich MyModule zu:

ändere %Vor%

... das Ergebnis ist:

%Vor%

Warum wird "foo" nicht mehr gedruckt?

    
stmax 10.07.2013, 15:52
quelle

1 Antwort

17

Ich denke Abschnitt 12.5.1 der Spezifikation, Ausführung der statischen Initialisierer , hat Ihre Antwort. Zitieren der relevanten Bits:

  

Der statische Initialisierer für die Datei wird beim ersten Zugriff auf einen Wert mit beobachtbarer Initialisierung ausgeführt

und

  

Alle Definitionen haben eine beobachtbare Initialisierung mit Ausnahme der folgenden Definitionen in Modulen:

Die folgende Liste enthält:

  

Nicht veränderbare, nicht thread-lokale Werte, die an einen einfachen konstanten Ausdruck gebunden sind

Nach dem Auskommentieren der ersten Zeile von test wird es zu einem konstanten Ausdruck. Daher löst es keine statische Initialisierung mehr aus.

BEARBEITEN

Die Spezifikation bietet nicht die Begründung für dieses Verhalten, aber es ähnelt C # 's. In diesem Code tritt beispielsweise keine statische Initialisierung auf:

%Vor%     
Daniel 10.07.2013, 16:08
quelle

Tags und Links