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
和empty
List
是否相同?或者,重要的是
列表在那里,但它是空的?它与
列表不存在时不同?

取决于用例。空列表实际上可能意味着与缺少列表不同的东西

选项[Int]
有意义吗?如果您只想表示一些糖果(0就可以了),那么可能不会。但是,如果您正在查找列表的最大元素,而该元素恰好为空,该怎么办<代码>无
在这种情况下比0更合适

列表和其他东西也是如此。如果你在某人的口袋里列出糖果的品牌,当然,你可以用
Nil
来覆盖一个没有任何糖果的穷人

但是,如果我们想描述,比如说一个商店的存货清单呢?
def listBrandsInInventory(product:String=“candy”):List[String]

如果这是一家书店,根本不卖糖果怎么办?当然,你可能会争辩说,没有人需要一家不卖糖果的商店,或者你仍然可以退货
Nil
(这甚至不会撒谎),但这里有两种不同的情况:要么所有的糖果都卖完了,要么我们根本不卖糖果(明天不用打电话了)。如果您想区分这两者,
选项[List]
很方便。

不,它不是更有效,因为
Nil
和空映射也是常量。实际上恰恰相反,因为现在你有了一个额外的包装器;但没什么大不了的无论何时,根据您的用例,有必要区分无数据和空数据,例如获取客户订单时,
None
可能意味着客户机不存在或注册错误,以及
Some(List.empty)
可能暗示用户是对的,但目前没有任何订单。但是,一般来说,
一些(空)
是多余的。现在,非常常见的是
选项[NonEmptyCollection]
,因为这消除了歧义,并提供了更有力的保证。@LuisMiguelMejíaSuárez我很喜欢你的反馈/帮助,为什么你不回答一个答案而不是评论,这样你就可以得到更多的认可,例如分数等,尤其是当你的评论更多的是一个答案时:),因为从技术上讲,这是一个基于意见的问题和答案,根据规则是“不好的”:p