scala可选最佳实践

2wnc66cl  于 2021-06-05  发布在  Kafka
关注(0)|答案(2)|浏览(399)
def canAppendOffset(offset: Long): Boolean = {
  toRelative(offset).isDefined
}

private def toRelative(offset: Long): Option[Int] = {
  val relativeOffset = offset - baseOffset
  if (relativeOffset < 0 || relativeOffset > Int.MaxValue) None
  else Some(relativeOffset.toInt)
}

当遇到前面提到的代码时,我会感到困惑。如果代码来自Kafkalogsegment。我想知道为什么我们需要一个可选的在这里,而不是简单地返回一个布尔值 canAppendOffset() . 对于我来说,为什么我们需要创建一个可选的并访问一个记录我需要的布尔值的字段似乎没有必要。我认为在软件设计方面一定有一些逻辑。有没有人能就在scala中使用optional的位置和原因给出一些建议?

bxpogfeg

bxpogfeg1#

对于我来说,为什么我们需要创建一个可选的并访问一个记录我需要的布尔值的字段似乎没有必要。
我同意。创建一个 toRelative 方法返回 Option[Int] 如果在实际使用计算偏移量的其他地方使用。很可能这个方法以前被用于其他用例,并且理解了实际使用的相对偏移量。
如果只想知道是否可以追加偏移量,可以简化:

private def canAppendOffset(offset: Long): Boolean = {
  val relativeOffset = offset - baseOffset
  relativeOffset >= 0 && relativeOffset < Int.MaxValue
}
k3bvogb1

k3bvogb12#

这里似乎有一些误解。
…创建一个可选字段并访问一个记录布尔值的字段。。。
这里没有田地。 isDefined 是中的一种方法 Option 类,该类测试此示例是否 Some() 或者 None .
…为什么我们需要一个可选的在这里,而不是简单地返回一个布尔值 canAppendOffset() .
但是 canAppendOffset() “只是返回一个 Boolean ". 是的 toRelative() “创造”了 Option 它这样做是因为,虽然它应该从给定的偏移量返回一个“相对值”,但如果不可能得到一个有效的结果,它实际上可能会失败。
所以它返回一个 Option[Int] ,从而告诉来电者,“这是 Some(relative) 如果它可以从给定的偏移量计算出来,但是 None 如果我不能给你算出一个好结果。”

相关问题