Я задаю немного другой вопрос, чем этот . Предположим, у меня есть фрагмент кода:
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
s def
s?