Scala 当列表容器支持empty属性时,像Option[List[…]这样的属性有意义吗?
对于类属性或函数参数(如:Scala 当列表容器支持empty属性时,像Option[List[…]这样的属性有意义吗?,scala,Scala,对于类属性或函数参数(如: Option[List[String]] Option[Map[String,String]] 将其包装在选项中是否提供了更高的可组合性?或者,由于容器(例如列表和地图)支持为空,因此将其作为选项是没有意义的 拥有选项是否更有效,因为它可以是无,而不是拥有列表。空或映射。空?这取决于;) 选项也是一个集合-它不能有超过1个元素(但可以有0个)。因此,在选项中包装另一个集合通常没有意义 然而,它取决于它所代表的内容和它所传达的语义。None和emptyList是否相同
Option[List[String]]
Option[Map[String,String]]
将其包装在选项中是否提供了更高的可组合性?或者,由于容器(例如列表和地图)支持为空,因此将其作为选项是没有意义的
拥有选项
是否更有效,因为它可以是无
,而不是拥有列表。空
或映射。空
?这取决于;)
选项
也是一个集合-它不能有超过1个元素(但可以有0个)。因此,在选项中包装另一个集合通常没有意义
然而,它取决于它所代表的内容和它所传达的语义。None
和emptyList
是否相同?或者,重要的是列表在那里,但它是空的?它与列表不存在时不同?取决于用例。空列表实际上可能意味着与缺少列表不同的东西
选项[Int]
有意义吗?如果您只想表示一些糖果(0就可以了),那么可能不会。但是,如果您正在查找列表的最大元素,而该元素恰好为空,该怎么办<代码>无
在这种情况下比0更合适
列表和其他东西也是如此。如果你在某人的口袋里列出糖果的品牌,当然,你可以用Nil
来覆盖一个没有任何糖果的穷人
但是,如果我们想描述,比如说一个商店的存货清单呢?
def listBrandsInInventory(product:String=“candy”):List[String]
如果这是一家书店,根本不卖糖果怎么办?当然,你可能会争辩说,没有人需要一家不卖糖果的商店,或者你仍然可以退货Nil
(这甚至不会撒谎),但这里有两种不同的情况:要么所有的糖果都卖完了,要么我们根本不卖糖果(明天不用打电话了)。如果您想区分这两者,选项[List]
很方便。不,它不是更有效,因为Nil
和空映射也是常量。实际上恰恰相反,因为现在你有了一个额外的包装器;但没什么大不了的无论何时,根据您的用例,有必要区分无数据和空数据,例如获取客户订单时,None
可能意味着客户机不存在或注册错误,以及Some(List.empty)
可能暗示用户是对的,但目前没有任何订单。但是,一般来说,一些(空)
和无
是多余的。现在,非常常见的是选项[NonEmptyCollection]
,因为这消除了歧义,并提供了更有力的保证。@LuisMiguelMejíaSuárez我很喜欢你的反馈/帮助,为什么你不回答一个答案而不是评论,这样你就可以得到更多的认可,例如分数等,尤其是当你的评论更多的是一个答案时:),因为从技术上讲,这是一个基于意见的问题和答案,根据规则是“不好的”:p