Комментарии 5
Странно, что нету декораторов функций.
В декораторах есть смысл, когда они применяются к декларативно объявленным элементам. Обычную функцию можно «декорировать», просто объявив новую функцию и вызывая старую внутри нее. И никакого нового синтаксиса для этого не понадобится.
Как вы предлагаете переписать следующий код?
@input_contract( n => n >= 0 )
@log
@memoize
function fact( n ) {
return n ? n * fact( n - 1 ) : n
}
Объявление функции в вашем примере — это выражение (expression), а не утверждение (statement). Возникает вопрос — а с анонимными функциями или другими выражениями типа «функция» как поступать? Придется либо усложнить грамматику и добавить два разных типа объявления функции, либо разрешить писать что-то вроде:
Имхо, оба варианта слишком спорные, чтобы их реализовывать на практике.
Так что задачу правильнее всего решить по-старинке, реализовав некий helper, принимающий массив функций и компонующий их:
var myFunc = @a @b c;
Имхо, оба варианта слишком спорные, чтобы их реализовывать на практике.
Так что задачу правильнее всего решить по-старинке, реализовав некий helper, принимающий массив функций и компонующий их:
let fact = decorate(
() => input_contract(n => n >= 0),
log,
memoize,
function(n) {
n ? n * fact( n - 1 ) : n
}
);
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Декораторы и рефлексия в TypeScript: от новичка до эксперта (ч.1)