OSの違いへの対応
クロスプラットフォームのアプリケーションやライブラリを書く場合,しばしばOSの違いを考慮する 必要があります.このような場合には,変数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)
else
generic_thing(a)
end条件式を(if/elseif/endを含みながら)連鎖させる場合,@staticは各レベルで繰り返し 書かれる必要があります(括弧を付けるかどうかは任意ですが,読みやすさのために推奨されます).
@static Sys.iswindows() ? :a : (@static Sys.isapple() ? :b : :c)