Handling Operating System Variation
クロスプラットフォームのアプリケーションやライブラリを書く際には、オペレーティングシステム間の違いを考慮する必要があることがよくあります。変数 Sys.KERNEL は、そのようなケースを処理するために使用できます。これを容易にするために、Sys モジュールにはいくつかの関数が用意されています。例えば、isunix、islinux、isapple、isbsd、isfreebsd、および iswindows などです。これらは次のように使用できます:
if Sys.iswindows()
windows_specific_thing(a)
endislinux、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)