Обработка вариаций операционных систем
При работе с платформами библиотек часто необходимо предоставлять специальные случаи для различных платформ. Переменная Sys.KERNEL может использоваться для написания этих специальных случаев. Существует несколько функций, призванных облегчить эту задачу: is_unix, is_linux, is_apple, is_bsd, и is_windows. Эти функции могут быть использованы следующим образом:
if is_windows()
some_complicated_thing(a)
end
Обратите внимание, что is_linux и is_apple являются взаимно исключающими подмножествами is_unix. Кроме того, существует макрос @static, который позволяет использовать эти функции для условного скрытия некорректного кода, как показано в следующих примерах.
Простые блоки:
ccall( (@static is_windows() ? :_fopen : :fopen), ...)
Сложные блоки:
@static if is_linux()
some_complicated_thing(a)
else
some_different_thing(a)
end
При объединении условных операторов (включая if/elseif/end), @static необходимо повторять для каждого уровня (скобки необязательны, но рекомендуются для читаемости):
@static is_windows() ? :a : (@static is_apple() ? :b : :c)
© 2009–2016 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/release-0.6/manual/handling-operating-system-variation/