Здравствуйте, Lloyd, Вы писали:
Lloyd>>По-моему, он имел в виду Reactive programming
Да, скорее всего мне оно и нужно.
Здравствуйте, VladD2, Вы писали:
VD>Такой макрос уже есть. Называется он Memoize. Применяется к методам.
VD>Единственная загвоздка — пересчет значений. Это в нем не сделано. Но это не трудно в него добавить. Можно добавить еще одну опцию задающую некий код при выполнении которого кэш будет сбрасываться. Тогда твой код будет выглядеть так:
VD>.........
Я попытался добавить свою опцию в этот макрос, но он отказывается её видеть:
.......
[Nemerle.MacroUsage (Nemerle.MacroPhase.WithTypedMembers, Nemerle.MacroTargets.Method)]
macro Memoize (tb : TypeBuilder, meth : MethodBuilder, params opts : list [PExpr])
{
mutable scope = if(meth.IsStatic) MemoizeScope.Class else MemoizeScope.Instance;
mutable synch = false;
mutable invalidValue = None();
mutable depends = None();
foreach (o in opts)
{
| <[ Depends($what) ]> => depends = Some(what) // <- это он полностью игнорирует
| <[ Scope = Instance ]> => scope = MemoizeScope.Instance
| <[ Scope = Class ]> => scope = MemoizeScope.Class
| <[ Scope = $other ]> =>
Message.Error (other.Location, $"Invalid parameter: Scope = $other. Valid options are Instance (default) and Class.")
| <[ Synchronized = $(opt : bool) ]> => synch = opt
| <[ Synchronized = $other ]> =>
Message.Error (other.Location, $"Invalid parameter: Synchronized = $other. Valid options are true and false (default).")
| <[ InvalidValue = $x ]> => invalidValue = Some(x)
| x => // <- постоянно вываливается сюда
Message.Error ($"Invalid parameter: $x. Valid parameters are Scope, Synchronized and InvalidValue.")
}
......
ЧЯДНТ?