簡體   English   中英

Scala方法參數:集合選項或默認值

[英]Scala Method Argument: Option of Collection or Default Value

我有采用[Int,MyClass]的Map作為參數的方法。 像這樣:

myMethod(someMap:Map [Int,MyClass])

但是,someMap可能並不總是存在(在Java世界中為null,在Scala中為None)。 從API的角度來看,以下哪一項是此方法的更好設計:

  1. 將其包裝在選項中:myMethod(someMap:Option [Map [Int,MyClass]] = None)

  2. 定義默認的空地圖:myMethod(someMap:Map [Int,MyClass] = Maps.empty)

第一個選項看起來很優雅,但是它增加了復雜性,那就是必須將Map(如果不是None)包裝在Some()中,並且在實現者中必須執行getOrElse來對其進行包裝。 第一個選項還向api使用者清楚表明,映射對象可能實際上不存在(無)

在第二個選項中,不必進行包裝(在Some中)或展開,但是,每當不存在任何Map對象時,都必須實例化一個空容器。

同樣,參數又是1:Option本身是0或1項的容器,而Map也是容器(集合)。 將一個容器包裝在另一個容器中是否是好的設計?

從API設計的角度來看,哪種方法更好?

正確的問題是: myMethodOption一起使用是否有意義?

myMethod的角度來看 ,也許它適用於Map在這種情況下,如果沒有可用的map,則調用者有責任不調用myMethod

另一方面,如果沒有MapmyMethod為空,則myMethod可能會做一些特殊的事情,這就是方法處理這種情況的責任。

因此,沒有正確的答案,但正確的論據是一種,因此尊重方法的責任。 目的是在您的函數和類之間具有高凝聚力和低耦合。

Map.empty便宜的操作 ,因為它是不可變的。 因此,使用它實際上沒有任何開銷。 因此,請保持簡單,索要沒有包裝的Map

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM