برای به اشتراک گذاشتن کد بین ماژولهای مختلف 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
یک alias اضافه کنید تا بتوان ماژول NeedForSpeed.Race را با اسم کوتاهتر Race ارجاع داد.
Car.__struct__/0 is undefined
یک alias اضافه کنید تا بتوان ماژول NeedForSpeed.RemoteControlCar را با اسم کوتاهتر Car ارجاع داد.
undefined function puts/1
تابع puts/1 از ماژول IO میآید. آن را import کنید تا بتوانید بدون ارجاع دادن به ماژول از آن استفاده کنید.
undefined function default_color/0
توابع default_color/0، red/0، cyan/0 و green/0 همه از ماژول IO.ANSI میآیند. قصد دارید پشتیبانی از رنگهای دیگر ماشین را هم اضافه کنید، پس میخواهید کل ماژول را import کنید. متأسفانه تابع color/1 از ماژول IO.ANSI با یکی از توابع محلیتان تداخل دارد. کل ماژول IO.ANSI را بهجز آن یک تابع import کنید.