Handling Operating System Variation

クロスプラットフォームのアプリケーションやライブラリを書く際には、オペレーティングシステム間の違いを考慮する必要があることがよくあります。変数 Sys.KERNEL は、そのようなケースを処理するために使用できます。 Sys モジュールには、これを容易にするためのいくつかの関数が用意されています。例えば、isunixislinuxisappleisbsdisfreebsd、および iswindows です。これらは次のように使用できます:

if Sys.iswindows()
    windows_specific_thing(a)
end

islinuxisapple、および 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)