从期权类型中获取价值的最佳和安全做法?
Best and safe practice to get value from Option type?
考虑到最佳实践,我尝试在选项中获取值。
例如,我有:
val listExample : List[Option[String]] = List(Some("A"), Some("B))
我想访问 A
和 B
一种方法是 listExample.head.get = "A"
、listExample.last.get = "B"
但这不是一个好的做法。怎么做:listExample.headOption.flatten.ToString
这样安全吗?
没有好的答案。
只需使用 .get
?
“如何从期权中获取价值?”问题的答案就是简单地使用get
。这是确定获得价值的唯一途径。 get
非常努力地从 Option
中提取它;您将始终以常规程序流程中的价值告终。这是因为,如果 get
的任务无法完成,那么您的本地程序流将被 Exception
.
终止。
大多数人会同意避免 get
来避免 Exception
,这通常会导致难以推理的非本地程序行为。
但是除了简单地“get
从 Option
中获取一个值”之外,您还可以做什么?这取决于在 None
的情况下会发生什么——而不是 Exception
:
否则,这取决于...
例如,如果您有一个 List[Option[A]]
并想要一个 List[A]
,只需忽略 None
值,然后执行 Option.flatten
.
如果您希望副作用仅在存在值时发生,可能取决于该值,请使用 Option.foreach
.
如果您想要获取存在的值,或者当存在 None
时获取默认值,请使用 Option.getOrElse
.
并且 flatMap
、map
、fold
、exists
、forall
、filter
可以使此列表更长orElse
,依此类推。
因此,您问题的最终答案是:这取决于……
这在很大程度上取决于你想做什么。
首先是用map
foreach
filter
等处理Option
里面的数据,contains
exists
forall
测试内容。在许多情况下,您可能根本不需要提取值。
只提取默认值
opt.getOrElse(default)
默认处理提取
op.fold(default)(process)
从多个选项中获取第一个有效的Option
:
(opt1 orElse opt2).getOrElse(default)
获取选项列表中的第一个有效选项
list.flatten.headOption
获取选项列表中的第 n 个有效选项
list.flatten.lift(n)
考虑到最佳实践,我尝试在选项中获取值。 例如,我有:
val listExample : List[Option[String]] = List(Some("A"), Some("B))
我想访问 A
和 B
一种方法是 listExample.head.get = "A"
、listExample.last.get = "B"
但这不是一个好的做法。怎么做:listExample.headOption.flatten.ToString
这样安全吗?
没有好的答案。
只需使用 .get
?
“如何从期权中获取价值?”问题的答案就是简单地使用get
。这是确定获得价值的唯一途径。 get
非常努力地从 Option
中提取它;您将始终以常规程序流程中的价值告终。这是因为,如果 get
的任务无法完成,那么您的本地程序流将被 Exception
.
大多数人会同意避免 get
来避免 Exception
,这通常会导致难以推理的非本地程序行为。
但是除了简单地“get
从 Option
中获取一个值”之外,您还可以做什么?这取决于在 None
的情况下会发生什么——而不是 Exception
:
否则,这取决于...
例如,如果您有一个 List[Option[A]]
并想要一个 List[A]
,只需忽略 None
值,然后执行 Option.flatten
.
如果您希望副作用仅在存在值时发生,可能取决于该值,请使用 Option.foreach
.
如果您想要获取存在的值,或者当存在 None
时获取默认值,请使用 Option.getOrElse
.
并且 flatMap
、map
、fold
、exists
、forall
、filter
可以使此列表更长orElse
,依此类推。
因此,您问题的最终答案是:这取决于……
这在很大程度上取决于你想做什么。
首先是用map
foreach
filter
等处理Option
里面的数据,contains
exists
forall
测试内容。在许多情况下,您可能根本不需要提取值。
只提取默认值
opt.getOrElse(default)
默认处理提取
op.fold(default)(process)
从多个选项中获取第一个有效的Option
:
(opt1 orElse opt2).getOrElse(default)
获取选项列表中的第一个有效选项
list.flatten.headOption
获取选项列表中的第 n 个有效选项
list.flatten.lift(n)