Обработка вариантов операционной системы
При написании кроссплатформенных приложений или библиотек часто необходимо учитывать различия между операционными системами. Для таких случаев можно использовать переменную Sys.KERNEL
. В модуле Sys
имеется несколько функций, упрощающих эту задачу, таких как isunix
, islinux
, isapple
, isbsd
, isfreebsd
и iswindows
. Их можно использовать следующим образом.
if Sys.iswindows()
windows_specific_thing(a)
end
Учтите, что islinux
, isapple
и isfreebsd
являются взаимоисключающими дочерними наборами isunix
. Кроме того, существует макрос @static
, позволяющий использовать данные функции, скрывая недействительный код при определенных условиях, как показано в следующих примерах.
Простые блоки:
ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)
Сложные блоки:
@static if Sys.islinux()
linux_specific_thing(a)
elseif Sys.isapple()
apple_specific_thing(a)
else
generic_thing(a)
end
При использовании вложенных условий необходимо повторять @static
на каждом уровне (использовать скобки не обязательно, но рекомендуется для удобочитаемости):
@static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)