النوع نوع عام عندما يمكنه أن يحتوي على قيم من أي نوع باستخدام معامل نوع.
على سبيل المثال، نوع Box هذا له معامل النوع a (مكتوب بحروف صغيرة).
pub type Box(a) {
Box(a)
}
معامل النوع a هو عنصر نائب لأي نوع، لذا يمكن استخدام Box مع السلاسل النصية أو الأعداد الصحيحة أو أي نوع آخر.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
يمكن للنوع أن يمتلك عدة معاملات نوع عبر فصلها بفواصل.
pub type Pair(a, b) {
Pair(a, b)
}
يمكن أيضًا استخدام معاملات النوع في وسائط الدوال.
تأخذ هذه الدالة قيمة من النوع a وتستدعي دالةً مرتين، تأخذ قيمة من النوع a وتُرجع قيمة من النوع b.
pub fn twice(value: a, f: fn(a) -> b) -> b {
f(value)
f(value)
}
// The type is fn(String, fn(String) -> Nil) -> Nil
twice("Hello, Joe!", io.println)
في هذا التمرين ستكتب صندوق كنز عامًا (أو سحريًا!) باسم TreasureChest، لتخزين بعض الكنوز.
TreasureChest
عرّف نوعًا مخصصًا اسمه TreasureChest بحالة واحدة.
يجب أن تحمل هذه الحالة قيمة مرتبطة من النوع String، تُستخدم لتخزين كلمة سر صندوق الكنز.
ويجب أن تحمل الحالة أيضًا قيمة عامة مرتبطة، تُستخدم لتخزين الكنز. هذه القيمة عامة حتى يمكن أن يكون الكنز أي شيء.
UnlockResult
عرّف نوعًا مخصصًا اسمه UnlockResult بحالتين.
يجب أن تكون الحالة الأولى Unlocked، وأن تحمل قيمة عامة تُستخدم لتخزين الكنز.
ويجب أن تكون الحالة الثانية WrongPassword، وهي لا تحمل أي قيم.
get_treasure
يجب أن تأخذ هذه الدالة معاملين
TreasureChest
String (لتجربة كلمة سر)يجب أن تتحقق هذه الدالة من كلمة السر المُجرَّبة مقابل قيمة String داخل TreasureChest.
يجب أن تُرجع هذه الدالة UnlockResult.
إذا تطابقت كلمتا السر فأرجِع Unlocked مع القيمة العامة الموجودة في TreasureChest (الكنز!).
وإذا لم تتطابق كلمتا السر فأرجِع WrongPassword.
سجّل في Exercism لتتعلّم وتتقن Gleam عبر 33 مفهومًا122 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.