处理操作系统差异

当面对平台相关的库时,通常要对不同的平台编写特定代码。变量Sys.KERNEL即用于这些特殊场合。在Sys模块中有一些函数将会使这些事情更加简单:isunixislinuxisappleisbsd,以及 iswindows。这些函数可以如下方式使用:

  1. if Sys.iswindows()
  2. some_complicated_thing(a)
  3. end

注意,islinuxisappleisunix完全互斥的子集。另外,有一个宏@static可以使用这些函数有条件地隐藏无效代码,如以下示例所示。

简单例子:

  1. ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)

复杂例子:

  1. @static if Sys.islinux()
  2. some_complicated_thing(a)
  3. else
  4. some_different_thing(a)
  5. end

当条件组合时,(包括if/elseif/end),@static必须在每一层都调用(括号是可选的,但是为了可读性,建议使用)。

  1. @static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)

原文: https://juliacn.github.io/JuliaZH.jl/latest/manual/handling-operating-system-variation/