2012-04-05 3 views
0

В веб-приложении Scala используется lazy val, ограниченное временем жизни сервера приложений, или запрашивается область действия?Scala web :: lazy val scope/lifetime

Я предполагаю, что это за запрос, но не смогли найти окончательный ответ, таким образом, вопрос.

Благодаря

ответ

2

lazy особенность Scala, не связанные с программированием веб-приложений. Это означает: оценивать только один раз при первом доступе. Если переменная является частью объекта, созданного для каждого запроса, он будет лениво оцениваться один раз за каждый запрос.

Если он объявлен внутри класса прикладной программы (или object), то после его оценки он будет сохранять свое значение до тех пор, пока класс загружен (вероятно, это время жизни WAR).

+0

Да, я понимаю, что оценка однажды бит ;-), когда вы говорите: «если переменная является частью объекта, созданного для каждого запроса», это означает, что при ЛЮБОМ новом создании объекта lazy свойство будет оцениваться один раз (так если я обновляю 10 экземпляров класса и получаю доступ к ленивым foo для каждого экземпляра, я понес бы накладные расходы ленивым 10X) – virtualeyes

+0

Как это относится к Scala singleton Objects, кстати? Существует не экземпляр объекта, созданный, так что здесь всегда, доступ один раз и будущие обращения не берут ленивых накладных расходов, я предполагаю. – virtualeyes

+1

@virtualeyes: yes, 'lazy' привязан к экземпляру объекта, поэтому, если вы создаете 10 объектов и получаете доступ к' lazy' свойству каждого из них, он будет оцениваться один раз * для каждого объекта *. WRT 'object' classes (singleletons) - существует только один экземпляр, поэтому« lazy »оценивается один раз для этого класса (за« ClassLoader »). –

Смежные вопросы