返回介绍

处理操作系统差异

发布于 2019-07-03 15:53:52 字数 1000 浏览 1019 评论 0 收藏 0

当编写跨平台的应用或库时,通常需要考虑到操作系统之间的差异。变量 Sys.KERNEL 可以用于这些场合。在 Sys 模块中有一些函数将会使这些事情更加简单:isunixislinuxisappleisbsdisfreebsd 以及 iswindows。这些函数可以按如下方式使用:

if Sys.iswindows()
    windows_specific_thing(a)
end

注意,islinuxisappleisfreebsdisunix 完全互斥的子集。另外,有一个宏 @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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文