Handling Operating System Variation
クロスプラットフォームのアプリケーションやライブラリを書く際には、オペレーティングシステム間の違いを考慮する必要があることがよくあります。変数 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)
elseif Sys.isapple()
apple_specific_thing(a)
else
generic_thing(a)
end
条件をネストする場合、@static
は各レベルごとに繰り返す必要があります(括弧はオプションですが、可読性のために推奨されます):
@static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)