處理作業系統差異

在撰寫跨平台應用程式或函式庫時,通常需要考量作業系統之間的差異。變數 Sys.KERNEL 可用於處理此類情況。Sys 模組中有多個函式旨在簡化此作業,例如 isunixislinuxisappleisbsdisfreebsdiswindows。它們可如下使用

if Sys.iswindows()
    windows_specific_thing(a)
end

請注意,islinuxisappleisfreebsdisunix 的互斥子集。此外,有一個巨集 @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)