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)