Scala 可选最佳实践
Scala Optional best practices
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)
}
当 运行 进入上述代码时,我感到困惑。来自 Kafka LogSegment 的代码。我想知道为什么我们在这里需要一个 Optional 而不是简单地 return canAppendOffset()
中的布尔值。在我看来,为什么我们需要创建一个 Optional 并访问一个记录我需要的布尔值的字段是不必要的。
我认为在软件设计方面必须有一些逻辑。谁能就在 Scala 中使用 Optional 的位置和原因提出任何建议?
这里似乎存在一些误解。
...create an Optional and access a field which records the boolean value...
这里没有字段。 isDefined
是 Option
class 中的一个方法,用于测试此实例是 Some()
还是 None
.
...why we need an Optional here rather than simply return a boolean in canAppendOffset()
.
但是 canAppendOffset()
"simply return a Boolean
"。 toRelative()
"creates" 和 Option
之所以如此,是因为 应该 到 return 一个 "relative"从给定的偏移量来看,如果不可能得到有效结果,它实际上可能会失败。
所以它 return 是一个 Option[Int]
,从而告诉调用者,"Here's Some(relative)
if it can be calculated from the given offset, but it's None
if I can't calculate a good result for you."
It looks unnecessary to me why we need to create an Optional and
access an field which records the boolean value I need.
我同意。 创建一个返回 Option[Int]
的 toRelative
方法是有意义的,如果它被用在实际使用计算出的偏移量的其他地方。很可能此方法以前用于其他用例,并了解实际使用的相对偏移量。
如果你只想知道是否可以附加偏移量,你可以简化:
private def canAppendOffset(offset: Long): Boolean = {
val relativeOffset = offset - baseOffset
relativeOffset >= 0 && relativeOffset < Int.MaxValue
}
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)
}
当 运行 进入上述代码时,我感到困惑。来自 Kafka LogSegment 的代码。我想知道为什么我们在这里需要一个 Optional 而不是简单地 return canAppendOffset()
中的布尔值。在我看来,为什么我们需要创建一个 Optional 并访问一个记录我需要的布尔值的字段是不必要的。
我认为在软件设计方面必须有一些逻辑。谁能就在 Scala 中使用 Optional 的位置和原因提出任何建议?
这里似乎存在一些误解。
...create an Optional and access a field which records the boolean value...
这里没有字段。 isDefined
是 Option
class 中的一个方法,用于测试此实例是 Some()
还是 None
.
...why we need an Optional here rather than simply return a boolean in
canAppendOffset()
.
但是 canAppendOffset()
"simply return a Boolean
"。 toRelative()
"creates" 和 Option
之所以如此,是因为 应该 到 return 一个 "relative"从给定的偏移量来看,如果不可能得到有效结果,它实际上可能会失败。
所以它 return 是一个 Option[Int]
,从而告诉调用者,"Here's Some(relative)
if it can be calculated from the given offset, but it's None
if I can't calculate a good result for you."
It looks unnecessary to me why we need to create an Optional and access an field which records the boolean value I need.
我同意。 创建一个返回 Option[Int]
的 toRelative
方法是有意义的,如果它被用在实际使用计算出的偏移量的其他地方。很可能此方法以前用于其他用例,并了解实际使用的相对偏移量。
如果你只想知道是否可以附加偏移量,你可以简化:
private def canAppendOffset(offset: Long): Boolean = {
val relativeOffset = offset - baseOffset
relativeOffset >= 0 && relativeOffset < Int.MaxValue
}