44

Looking through the Scala 2.8 Predef class, I find that there is a method "locally". As near as I can tell, it's the same as Predef.identity, except for having the "@inline" annotation. What's it for, and why is it important enough to be in Predef (and thus usable anywhere in Scala)?

3
  • 4
    See: scala-lang.org/node/3594 Commented Jul 13, 2010 at 14:20
  • Wow, I was actually a part of that thread and forgot all about it. If you make this an answer rather than a comment, I'll accept it and close the question Commented Jul 13, 2010 at 14:25
  • 2
    Hmm. I'd still be interested what's the difference between identity and locally. Commented Jul 16, 2010 at 22:04

1 Answer 1

50

It is discussed here: http://www.scala-lang.org/node/3594

The idea was to avoid the programmer error of confusing a 'dangling' local block with the template of an object/class/trait.

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 

If the programmer really wants that block to stand alone, locally could be used:

object test { object a { val x = 1 } object b locally { val x = 1 } } 

This thread also suggested that the first code would produce a deprecation warning. This has not yet been added.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.