Обработка различий операционных систем
При написании кроссплатформенных приложений или библиотек часто необходимо учитывать различия между операционными системами. Переменная 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)
else
generic_thing(a)
end
При объединении условных операторов (включая if/elseif/end), @static необходимо повторять для каждого уровня (скобки необязательны, но рекомендуются для лучшей читаемости):
@static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)
© 2009–2019 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.2.0/manual/handling-operating-system-variation/