跳至主要内容

Scala 基本型態 Symbol

Scala 基本型態 Symbol

  • 相同 name 屬性 (內容) 的Symbol會指向同一個 instance
    • Symbol 有一個 field 稱作 name, 用來接 content
  • 相同內容 (s.name) 的Symbol有相同的Hash 🢂 方便快速比較, 節省效能
    • 所以可以用 == 來進來快速比較
    • 使用情境, 例如 Map<String, Data> 可以改為 Map<Symbol, Data> 加速 map keys 的比對
  • Symbols are used where you have a closed set of identifiers that you want to be able to compare quickly.
  • 封閉的有限數量符號, 是字串的再次封裝, 方便比較用
  • 類似 static string, 或是 String type 的 enum
    // # 1
// Same content => JVM 自動處理校正成 Same instance
val var1 = Symbol("Same Same")
val var2 = Symbol("Same Same")
print(var1.hashCode())
print(var2.hashCode())
println(var1 == var2) //true
println(var1 eq var2) //true

// 非 Symbol, JVM 部會自動校正成相同 instance
val str1 = new String("Different")
val str2 = new String("Different")
print(str1.hashCode())
print(str2.hashCode())
println(str1 == str2) //true
println(str1 eq str2) //false