【发布时间】:2014-12-04 20:33:26
【问题描述】:
我有一个将 [Int, MyClass] 的 Map 作为参数的方法。像这样的:
myMethod(someMap : Map[Int, MyClass])
但是,someMap 可能并不总是存在(Java 世界中为 null,Scala 中为 None)。 从 API 的角度来看,以下哪项是该方法的更好设计:
将其包装在一个选项中: myMethod(someMap : Option[Map[Int, MyClass]] = None)
定义默认空地图: myMethod(someMap : Map[Int, MyClass] = Maps.empty)
第一个选项看起来很优雅,但是它具有额外的复杂性,即必须在 Some() 中包装 Map(如果不是 None)并且在实现者中必须执行 getOrElse 来解包它。 第一个选项也让 api 的使用者清楚,地图对象可能实际上并不存在(无)
在第二个选项中,不必进行包装(在 Some 中)或展开,但每次没有现有 Map 对象时都必须实例化一个空容器。
另外,反对 1 的参数:Option 本身是一个包含 0 或 1 个项目的容器,而 Map 也是一个容器(集合)。将一个容器包裹在另一个容器中是不是很好的设计?
从 API 设计的角度来看,哪种方法更好?
【问题讨论】:
标签: scala scala-collections scala-option