Иногда в Эрланге не хватает этой интересной возможности, поэтому мне захотелось ее получить.
Поискав в Интернете, я наткнулся статья .
Автор практически полностью реализовал весь функционал, кроме передачи аргументов декоратору.
я дам это сразу связь на Гитхабе.
Итак, отличие моего проекта в том, что декоратор может настроить параметры и опции.
подробный , благодаря чему декоратору в качестве 3-го аргумента будет передан кортеж с именем функции и строкой в файле.
Пример варианта использования, в котором используются обе эти функции (конечно, не производственный, но суть должна быть ясна).
Ну и тест из 2-х звонков:-module(memoize).
% This row is required for decorators -compile([{parse_transform,decorators}]).
% exporting decorator function -export([memoize/4]).
% api exports -export([fact/1]).
% pretty decorator usage -define(MEMOIZE, -decorate({ЭMODULE,memoize,[ЭMODULE],verbose})).
memoize(F,Args,{FunName,_Line},Module)-> case ets:info(memoize) of undefined -> ets:new(memoize,[public,named_table]); _-> ok end, case ets:lookup(memoize,{Module,FunName,Args}) of [] -> R = apply(F,[Args]), ets:insert(memoize,{{Module,FunName,Args},R}), R; [{_,Value}] -> Value end. ЭMEMOIZE. % decorator fact(N) when is_integer(N) andalso N>=1 -> fact(N,1).
fact(1,Acc) -> Acc; fact(N,Acc) -> fact(N-1,Acc*N).
>> timer:tc(memoize,fact,[1000]).
{1282,
.
}.
>> timer:tc(memoize,fact,[1000]).
{9,
.
}.
Те.
рост заметен :) Не хочу устраивать холивар о том, нужно это или нет, просто буду рад, если это кому-нибудь пригодится.
P.S. Если кому интересно, позже могу полностью описать весь процесс генерации кода с помощью parse_transform. Теги: #erlang #Erlang/OTP
-
«Целостная Жизнь»: Опять Этот Ваш Коучинг?
19 Oct, 24 -
Оригинальное Резюме
19 Oct, 24 -
Яндекс Запускает Travel
19 Oct, 24 -
E-Port Запускает «E-Port Mobile»
19 Oct, 24 -
Ipod-Микшер
19 Oct, 24