首页 > 解决方案 > 何时在前提条件上使用 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)
  }
} 

标签: scalapreconditions

解决方案


推荐阅读