Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
335 views
in Technique[技术] by (71.8m points)

scala - What does Predef.locally do, and how is it different from Predef.identity

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)?

question from:https://stackoverflow.com/questions/3237727/what-does-predef-locally-do-and-how-is-it-different-from-predef-identity

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...