在寫Scala的時候,apply這個東西應該不用多說了,很常會使用到,當你在定義一個object的時候,你要把參數塞進去(。
但是unapply我自己就很少注意到他,其實他是很好用的!
例如當要處理一個Request並取出query string中的參數時,若是以一般的寫法,可能會定義一個case class,然後把值取出來後,以這個type的object來傳遞使用
但若是我們透過unapply的方式,直接定義這個Request物件extract value的規則後,query string的字串(甚至是web framework的request object),就可以直接像下面的方式一樣使用了!
比較過這兩段code之後,可以發現在run()裡面(也就是主要邏輯的程式)有以下的差異
- unapply的方式不需要另外呼叫別的function來進行parse
- unapply可以直接將extract的結果塞到像是id, country, language的變數中,直接使用,比起原本還是要透過"request"這個變數才能取得id, country, language,這樣看起來也比較精簡
- pattern match可直接針對原本的形態進行處理,不用先parse(轉型)過。
沒有留言:
張貼留言