Я изучал scala, и я должен сказать, что это действительно классный язык. Мне особенно нравятся его возможности сопоставления шаблонов и функциональные литералы, но я исхожу из javascript, рубинового фона и одного из моих любимых шаблонов на этих языках - это ленивый шаблон определения функции и метода. Пример в javascript:
var foo = function() {
var t = new Date();
foo = function() {
return t;
};
return foo();
};
Тот же код с незначительными трюками работает в рубине, где вы просто используете объект singleton для переопределения метода после выполнения вычисления. Такие вещи действительно очень полезны, когда задействованы дорогостоящие вычисления, и вы не знаете заранее, если вам понадобится результат. Я знаю, что в scala я могу использовать кеш, чтобы имитировать такой же результат, но я стараюсь избегать условных проверок, и до сих пор мои эксперименты дали отрицательные результаты. Кто-нибудь знает, существует ли ленивая функция или шаблон определения метода в scala?
Примечание. Код javascript от Peter Michaux сайт.