Handling Operating System Variation
Lors de l'écriture d'applications ou de bibliothèques multiplateformes, il est souvent nécessaire de tenir compte des différences entre les systèmes d'exploitation. La variable Sys.KERNEL
peut être utilisée pour gérer de tels cas. Il existe plusieurs fonctions dans le module Sys
destinées à faciliter cela, telles que isunix
, islinux
, isapple
, isbsd
, isfreebsd
et iswindows
. Celles-ci peuvent être utilisées comme suit :
if Sys.iswindows()
windows_specific_thing(a)
end
Notez que islinux
, isapple
et isfreebsd
sont des sous-ensembles mutuellement exclusifs de isunix
. De plus, il existe un macro @static
qui permet d'utiliser ces fonctions pour masquer conditionnellement du code invalide, comme démontré dans les exemples suivants.
Blocs simples :
ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)
Blocs complexes :
@static if Sys.islinux()
linux_specific_thing(a)
elseif Sys.isapple()
apple_specific_thing(a)
else
generic_thing(a)
end
Lorsqu'on imbrique des conditionnelles, le @static
doit être répété pour chaque niveau (les parenthèses sont optionnelles, mais recommandées pour la lisibilité) :
@static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)