symbol.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 70 行

SCALA
70
字号
/*                     __                                               *\**     ________ ___   / /  ___     Scala API                            ****    / __/ __// _ | / /  / _ |    (c) 2003-2008, LAMP/EPFL             ****  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **** /____/\___/_/ |_/____/_/ | |                                         ****                          |/                                          **\*                                                                      */// $Id: Symbol.scala 14531 2008-04-07 12:15:54Z washburn $package scalaimport scala.collection.jclprivate[scala] object internedSymbols extends jcl.WeakHashMap[String, ref.WeakReference[Symbol]]/** <p> *    This class provides a simple way to get unique objects for *    equal strings. Since symbols are interned, they can be compared using *    reference equality. Instances of  *    <code>Symbol</code> can be created easily with Scala's built-in*     quote mechanism. *  </p> *  <p> *    For instance, the <a href="http://scala-lang.org/" target="_top">Scala</a> *    term <code>'mysym</code> will invoke the constructor of the *    <code>Symbol</code> class in the following way: *    <code>Symbol("mysym")</code>. *  </p> *   *  @author  Martin Odersky, Iulian Dragos *  @version 1.8 */@serializablefinal class Symbol private (val name: String) {  /** Converts this symbol to a string.   */  override def toString(): String = "'" + name  @throws(classOf[java.io.ObjectStreamException])  private def readResolve(): Any = Symbol.apply(name)}object Symbol {  /** <p>   *    Makes this symbol into a unique reference.   *  </p>   *  <p>   *    If two interened symbols are equal (i.e. they have the same name)   *    then they must be identical (wrt reference equality).   *  </p>   *   *  @return the unique reference to this string.   */  def apply(name: String): Symbol = internedSymbols.synchronized {    internedSymbols.get(name).flatMap(_.get) match {    case Some(sym) => sym     case _ =>      val sym = new Symbol(name)      internedSymbols(name) = new ref.WeakReference(sym)      sym    }  }  def unapply(other: Symbol): Option[String] = Some(other.name)}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?