處理作業系統差異
在撰寫跨平台應用程式或函式庫時,通常需要考量作業系統之間的差異。變數 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)