Что делает Predef.locally, и как оно отличается от Predef.identity

Просматривая класс Scala 2.8 Predef, я обнаружил, что существует метод "локально". Насколько я могу судить, это то же самое, что и Predef.identity, за исключением аннотации "@inline". Для чего и почему достаточно важно быть в Predef (и, следовательно, использоваться в любом месте в Scala)?

Ответы

Ответ 1

Здесь обсуждается: http://www.scala-lang.org/node/3594

Идея заключалась в том, чтобы избежать ошибки программиста в запутывании локального блока "обвисшего" с шаблоном объекта/класса/признака.

object test {
  object a
  {
    val x = 1
  }

  object b

  { // oops, extra newline disassociates this block with the object b
    val x = 1
  }
}
test.a.x
//test.b.x // doesn't compile

Если программист действительно хочет, чтобы этот блок был автономным, locally можно было бы использовать:

object test {
  object a
  {
    val x = 1
  }

  object b

  locally {
    val x = 1
  }
}

Этот поток также предложил, чтобы первый код выдавал предупреждение об устаревании. Это еще не добавлено.