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)