Handling Operating System Variation
Al escribir aplicaciones o bibliotecas multiplataforma, a menudo es necesario permitir diferencias entre sistemas operativos. La variable Sys.KERNEL
se puede utilizar para manejar tales casos. Hay varias funciones en el módulo Sys
destinadas a facilitar esto, como isunix
, islinux
, isapple
, isbsd
, isfreebsd
e iswindows
. Estas se pueden usar de la siguiente manera:
if Sys.iswindows()
windows_specific_thing(a)
end
Tenga en cuenta que islinux
, isapple
e isfreebsd
son subconjuntos mutuamente excluyentes de isunix
. Además, hay un macro @static
que hace posible usar estas funciones para ocultar condicionalmente código inválido, como se demuestra en los siguientes ejemplos.
Bloques simples:
ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)
Bloques complejos:
@static if Sys.islinux()
linux_specific_thing(a)
elseif Sys.isapple()
apple_specific_thing(a)
else
generic_thing(a)
end
Al anidar condicionales, el @static
debe repetirse para cada nivel (los paréntesis son opcionales, pero se recomiendan para mejorar la legibilidad):
@static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)