Scala 為 Map collection 增加 "->" 語法糖衣 (syntactic sugar) 的作法

最近在閱讀 Programming in Scala 這本書,書中在第十九章時,提到當我們在建立 Map 時常使用的語法︰

Map(1->"one",2->"two",3->"three")

當中的 -> 並不是內建在 scala 語言本身,而是透過一些機制所建立的語法糖衣。於是好奇就去 trace 了一下 collection/mutable/Map.scala 檔,看看這個糖衣本身是怎麼被實作出來的。後來發現其實並不難,實作方式可以參考下列的 code:

object MyMap {
    def apply() = new MyMap[String, String]();
}

class MyMap[A, B] {
    def +=(key: A): MapTo = new MapTo(key);
    
    class MapTo(key: A) {
        def -> (value: B) { 
            println("key:\t" + key);
   println("value:\t" + value);
        }
    }
}

使用方式︰

val myMap = MyMap();
myMap += "one" -> "1"

0 意見: