Decorators wrap a function with another ordinary function
// Decorators wrap a function with another ordinary function.
import std.io.println;
import std.text.number;
def doubled(comptime f: fn(int): int, value: int): int {
return f(value) * 2;
}
def plus_one(comptime f: fn(int): int, value: int): int {
return f(value) + 1;
}
@plus_one
@doubled
def square(value: int): int { return value * value; }
def main(): int {
println(int_to_text(square(5)));
return 0;
}// المزخرفات تغلف دالة بدالة عادية أخرى.
استورد std.io.println;
استورد std.text.number;
عرف ضاعف(وقت_الترجمة د: دالة(عدد): عدد, القيمة: عدد): عدد {
أرجع د(القيمة) * 2;
}
عرف زد_واحدا(وقت_الترجمة د: دالة(عدد): عدد, القيمة: عدد): عدد {
أرجع د(القيمة) + 1;
}
@زد_واحدا
@ضاعف
عرف مربع_العدد(القيمة: عدد): عدد { أرجع القيمة * القيمة; }
عرف الرئيسية(): عدد {
اطبع_سطر(عدد_إلى_نص(مربع_العدد(5)));
أرجع 0;
}
Run it
With the interpreter, without compiling:
./build/sultanc run examples/en/comptime/decorators.snOr compile it to an executable:
./build/sultanc examples/en/comptime/decorators.sn -o build/example && ./build/example