لمشاركة الكود بين وحدات Elixir مختلفة داخل المشروع نفسه، تحتاج إلى الإشارة إلى الوحدة الخارجية باسمها الكامل. لكن ماذا لو كان هذا الاسم طويلًا جدًا أو مربكًا؟
تتيح لك الصيغة الخاصة alias تقصير الاسم الذي تشير به إلى وحدة خارجية أو تغييره. وعند استخدامها بدون أي وسائط، فإنها تختصر اسم الوحدة إلى مقطعه الأخير، على سبيل المثال يتحول MyApp.Logger.Settings إلى Settings. ويمكن تحديد اسم مخصص عبر الخيار :as.
عادةً تُضاف الأسماء المستعارة في بداية تعريف الوحدة.
defmodule Square do
alias Integer, as: I
def area(a), do: I.pow(a, 2)
end
تتيح لك الصيغة الخاصة import استخدام دوال من وحدة خارجية دون كتابة اسم الوحدة.
قد يؤدي استيراد وحدة خارجية بالكامل إلى تعارضات مع الدوال المحلية الموجودة. ولتجنب ذلك، يتوفر خياران: :except و:only. وكلاهما يتوقع قائمة كلمات مفتاحية، يكون فيها المفتاح اسم الدالة والقيمة عدد معاملاتها.
عادةً تُضاف الاستيرادات في بداية تعريف الوحدة.
defmodule Square do
import Integer, only: [pow: 2]
def area(a), do: pow(a, 2)
end
تلك السيارة التي تعمل بالتحكم عن بُعد والتي اشتريتها مؤخرًا قد تحوّلت إلى هواية جديدة بالكامل. لقد كنت تنظّم سباقات لسيارات التحكم عن بُعد.
كنت قد أوشكت على الانتهاء من كتابة برنامج يسمح بتشغيل محاكاة السباقات، حين قفز قطك على لوحة المفاتيح وحذف بضعة أسطر من الكود. والآن لم يعد برنامجك يُترجم...
Race.__struct__/0 is undefined
أضف اسمًا مستعارًا حتى يمكن الإشارة إلى الوحدة NeedForSpeed.Race بالاسم الأقصر Race.
Car.__struct__/0 is undefined
أضف اسمًا مستعارًا حتى يمكن الإشارة إلى الوحدة NeedForSpeed.RemoteControlCar بالاسم الأقصر Car.
undefined function puts/1
الدالة puts/1 تأتي من الوحدة IO. استوردها حتى تتمكن من استخدامها دون الإشارة إلى الوحدة.
undefined function default_color/0
الدوال default_color/0 وred/0 وcyan/0 وgreen/0 كلها تأتي من الوحدة IO.ANSI. وأنت تخطط لإضافة دعم لألوان سيارات أخرى، لذلك تريد استيراد الوحدة كاملة. للأسف، تتعارض الدالة color/1 من الوحدة IO.ANSI مع إحدى دوالك المحلية. استورد الوحدة IO.ANSI كاملة باستثناء تلك الدالة.
سجّل في Exercism لتتعلّم وتتقن Elixir عبر 58 مفهومًا168 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.