Просматривая класс Scala 2.8 Predef, я обнаружил, что существует метод "локально". Насколько я могу судить, это то же самое, что и Predef.identity, за исключением аннотации "@inline". Для чего и почему достаточно важно быть в Predef (и, следовательно, использоваться в любом месте в Scala)?
Что делает Predef.locally, и как оно отличается от Predef.identity
Ответ 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
}
}
Этот поток также предложил, чтобы первый код выдавал предупреждение об устаревании. Это еще не добавлено.