2017-03-29 6 views
1

Ich bin gerade mit Julia Sie beginnen und haben ein Modul wie folgt definiert:kann nicht konkrete Klasse in Julia instanziiert

MyModule.jl

module MyModule 
export ConcreteClass 
end 

Dann habe ich eine Datei, die einige triviale abstrakt definiert Klasse:

generics.jl

abstract MyAbstract 

Danach versuche ich, erben diese Klasse:

concrete.jl

type ConcreteClass <: MyAbstract 

end 

Natürlich ist dies trivial, aber ich wollte nur in der Lage sein, ein triviales Beispiel zu instanziieren. Ich habe den Weg zu meinem Projekt Quellen an die LOAD_PATH Variable und in meiner julia Konsole lief ich folgendes:

using MyModule # No error 
r = ConcreteClass() 

Die zweite Zeile nicht mit: ERROR: UndefVarError: ConcreteClass not defined. Die Sache in der Julia-Konsole, wenn ich die zweite Zeile die Autovervollständigung eintippt schlägt vor, ConcreteClass, so dass der Typ erkannt wird, aber nicht sicher, warum der not defined Fehler kommt.

Antwort

2

Ich denke, ich habe es herausgefunden. Ich habe einige include Anweisungen vermisst, die notwendig zu sein scheinen.

MyModule.jl

module MyModule 
export ConcreteClass 
include("concrete.jl") 
end 

concrete.jl

include("generics.jl") 
type ConcreteClass <: MyAbstract 

end 

Nach dem Hinzufügen dieser Zeilen:

r = ConcreteClass() # works fine 
+3

Persönlich habe ich alle die umfasst im MyModule .J L. Sie müssen nur sicherstellen, dass Sie generics.jl vor concrete.jl einschließen. Nur eine Stilsache. –

+0

@ChrisRackauckas Danke dafür. Ich habe gerade angefangen, heute mit der Sprache zu spielen und so etwas zu lernen :) Gut zu wissen. – Luca

+0

@ChrisRackauckas Ich habe jedoch einen Kommentar. Auf diese Weise verbirg ich die 'MyAbstract' Klasse vom Benutzer der Bibliothek und sie können nicht versehentlich versuchen, sie zu instantiieren. Ist das eine Überlegung wert? – Luca

Verwandte Themen