2015/07/18

[ScaVa->Scala] Unapply (Extraction Method)


在寫Scala的時候,apply這個東西應該不用多說了,很常會使用到,當你在定義一個object的時候,你要把參數塞進去(。

但是unapply我自己就很少注意到他,其實他是很好用的!
例如當要處理一個Request並取出query string中的參數時,若是以一般的寫法,可能會定義一個case class,然後把值取出來後,以這個type的object來傳遞使用
但若是我們透過unapply的方式,直接定義這個Request物件extract value的規則後,query string的字串(甚至是web framework的request object),就可以直接像下面的方式一樣使用了!
比較過這兩段code之後,可以發現在run()裡面(也就是主要邏輯的程式)有以下的差異

  1. unapply的方式不需要另外呼叫別的function來進行parse
  2. unapply可以直接將extract的結果塞到像是id, country, language的變數中,直接使用,比起原本還是要透過"request"這個變數才能取得id, country, language,這樣看起來也比較精簡
  3. pattern match可直接針對原本的形態進行處理,不用先parse(轉型)過。
參考資料:官方教學 A Tour of Scala: Extractor Objects




張貼留言

My World