Handling Operating System Variation
Beim Schreiben von plattformübergreifenden Anwendungen oder Bibliotheken ist es oft notwendig, Unterschiede zwischen Betriebssystemen zu berücksichtigen. Die Variable Sys.KERNEL
kann verwendet werden, um solche Fälle zu behandeln. Es gibt mehrere Funktionen im Sys
-Modul, die dies erleichtern sollen, wie isunix
, islinux
, isapple
, isbsd
, isfreebsd
und iswindows
. Diese können wie folgt verwendet werden:
if Sys.iswindows()
windows_specific_thing(a)
end
Beachten Sie, dass islinux
, isapple
und isfreebsd
gegenseitig ausschließende Teilmengen von isunix
sind. Darüber hinaus gibt es ein Makro @static
, das es ermöglicht, diese Funktionen zu verwenden, um ungültigen Code bedingt auszublenden, wie in den folgenden Beispielen gezeigt.
Einfache Blöcke:
ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)
Komplexe Blöcke:
@static if Sys.islinux()
linux_specific_thing(a)
elseif Sys.isapple()
apple_specific_thing(a)
else
generic_thing(a)
end
Beim Verschachteln von Bedingungen muss @static
für jede Ebene wiederholt werden (Klammern sind optional, aber zur besseren Lesbarkeit empfohlen):
@static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)