Я хочу написать функцию memoize в scala, которая может быть применена к любому объекту функции независимо от того, что это за объект функции. Я хочу сделать это таким образом, чтобы я мог использовать единую реализацию memoize. Я гибко отношусь к синтаксису, но в идеале memoize появляется где-то очень близко к объявлению функции, а не после функции. я также хотел бы избежать первого объявления исходной функции, а затем второго объявления для memoized версии.
поэтому может быть и такой идеальный синтаксис:
def slowFunction(<some args left intentionally vague>) = memoize {
// the original implementation of slow function
}
и даже это было бы приемлемо:
def slowFUnction = memoize { <some args left intentionally vague> => {
// the original implementation of slow function
}}
Я видел способы сделать это, когда memoize необходимо переопределить для каждой функции arity, но я хочу избежать этого подхода. причина в том, что мне нужно будет реализовать десятки функций, подобных memoize (т.е. другим декораторам), и это слишком много, чтобы попросить скопировать каждый из них для каждой функции arity.
один способ сделать memoize, что требует повторения memoize-объявлений (так что это нехорошо) находится на Какой тип использовать для хранения измененной таблицы данных в памяти в Scala?.