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)