scala - 何时在前提条件上使用 Option/Some/None
问题描述
我正在编写一个小程序包,但不确定是否应该使用诸如 的先决条件来标记不受支持的行为require
,或者是否应该返回None
。有喜欢的风格吗?
例如,我有一个方法可以将递增的区间 [a, b] 分成 4 个部分:
def increasingPartition(a: Double, b: Double): Vector[Double] = {
for (i <- Vector.range(0, 5)) yield {
a + i * (b - a) / 5
}
}
如果使用 调用此函数a >= b
,则不应计算分区,因为它不会增加。表达这种行为的最佳方式是什么?
选项1:
def increasingPartition(a: Double, b: Double): Vector[Double] = {
require(a < b, f"$a is not less than $b")
for (i <- Vector.range(0, 5)) yield {
a + i * (b - a) / 5
}
}
选项 2:
def increasingPartition(a: Double, b: Double): Option[Vector[Double]] = {
if (a >= b) {
None
} else {
val partition = for (i <- Vector.range(0, 5)) yield {
a + i * (b - a) / 5
}
Some(partition)
}
}
解决方案
推荐阅读
- javascript - 在 Angular 6 中导入 Vanilla JavaScript 库
- mysql - 错误输入 auto_increment 程序和未检测到的列
- node.js - Mongoose查找操作中的屏蔽数据
- android - 嵌套 RecyclerView:onBindViewHolder 被无限调用
- spring - 无法初始化spring-boot数据库
- alfresco - 我需要在 ManifoldCF 中配置权限吗?
- java - Apache Camel JdbcAggregationRepository 在 Oracle 12C 中需要不成比例的 TABLESPACE
- c++ - 如何在 IntelliJ IDEA 中使用 C++?
- laravel - 如何知道aws中每个api每天处理多少个请求
- kotlin - 是否不可能有没有参数的步骤定义?