## StructMap
StructMap和普通的map類似,它的作用其實是用來模擬java里面的javabean, 所以它比普通的map的優點就是,它把一些常用的字段抽象到一個map里面去,這樣你就不用一遍一遍的重復了。并且和java類似,他會幫你生成合適的 `equals` 和 `hashCode` 方法。并且它還提供方式讓你可以創建比普通map里面的hash查找要快的字段訪問方法(javabean里面的getXXX方法)。
`create-struct` 函數 和 `defstruct` 宏都可以用來定義StructMap, defstruct內部調用的也是 `create-struct` 。map的key通常都是用keyword來指定的。看例子:
```
(def vehicle-struct (create-struct :make :model :year :color)) ; long way
(defstruct vehicle-struct :make :model :year :color) ; short way
```
`struct` 實例化StructMap的一個對象,相當于java里面的new關鍵字. 你提供給struct的參數的順序必須和你定義的時候提供的keyword的順序一致,后面的參數可以忽略, 如果忽略,那么對應key的值就是nil。看例子:
```
(def vehicle (struct vehicle-struct "Toyota" "Prius" 2009))
```
`accessor` 函數可以創建一個類似java里面的getXXX的方法, 它的好處是可以避免hash查找, 它比普通的hash查找要快。看例子:
```
; Note the use of def instead of defn because accessor returns
; a function that is then bound to "make".
(def make (accessor vehicle-struct :make))
(make vehicle) ; -> "Toyota"
(vehicle :make) ; same but slower
(:make vehicle) ; same but slower
```
在創建一個StructMap之后, 你還可以給它添加在定義struct的時候沒有指定的key。但是你不能刪除定義時候已經指定的key。