Я задаю несколько иной вопрос, чем этот. Предположим, у меня есть фрагмент кода:
def foo(i : Int) : List[String] = {
val s = i.toString + "!" //using val
s :: Nil
}
Это функционально эквивалентно следующему:
def foo(i : Int) : List[String] = {
def s = i.toString + "!" //using def
s :: Nil
}
Почему я должен выбирать один за другим? Очевидно, я предполагаю, что второй имеет небольшие недостатки:
- создание более байт-кода (внутренний
def
поднимается до метода в классе) - служебные данные о производительности выполнения при вызове метода для доступа к значению
- Нестрогая оценка означает, что я мог бы легко получить доступ к
s
в два раза (т.е. ненужно переделать расчет)
Единственное преимущество, о котором я могу думать, это:
- нестрогая оценка
s
означает, что она вызывается только в том случае, если она используется (но тогда я мог бы просто использоватьlazy val
)
Каковы мысли людей здесь? Есть ли существенная неудобства для меня, делая все внутренние val
def
s?