Документация Engee

Обработка вариантов операционной системы

При написании кроссплатформенных приложений или библиотек часто необходимо учитывать различия между операционными системами. Для таких случаев можно использовать переменную 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)