我需要返回元组,但是如果出现问题我想要返回空元组,例如列表中的Seq.empty[Type]
或Nil
。可能吗?
我也很好奇是否可以使用String类型。
答案 0 :(得分:8)
我想要返回空元组
这没有意义。元组不是集合。 “空虚”的概念简直是非感性的。元组的长度是其类型的一部分。因此,空元组是一种与非空元组不同的类型。
事实上,谈论“元组”作为一种类型甚至没有意义。有成对(2元组又名Tuple2
),三元组(3元组又名Tuple3
),四元组,五元组,六元组,七元组,八元组,9元组,10元组等等都是不同的类型。
此外,或多或少你可以用元组做的唯一合理的事情就是提取它的元素。所以,对于没有元素的元组,你几乎没有任何明智的事情可以做。没有值且没有操作的结构有什么用?这完全没用。
实际上,0元组与Unit
值同构,该值表示缺少有用值。在Scala和Haskell中,空元组的语法实际上用于表示Unit
值:
val u = ()
// => u: Unit = ()
我也很好奇是否可以使用String类型。
是的,当然,你可以有一个空字符串:
val s = ""
// => s: String = ""
答案 1 :(得分:1)
因为您需要返回一个可能出错的值。在Scala中,推荐的处理方法是返回Option,Try或Either值。
例如:
def somethingThatCanGoWrongWithTry(): Try[(Int, String)] = {
Try{
val intValue = sideEffectValueInt()
val stringValue = sideEffectValueString()
(intValue, stringValue)
}
}
def somethingThatCanGoWrongWithOption(): Option[(Int,String)] = {
Try {
val intValue = sideEffectValueInt()
val stringValue = sideEffectValueString()
(intValue, stringValue)
}.toOption
}
def somethingThatCanGoWrongWithEither(): Either[Oops, (Int,String)] = {
Try {
val intValue = sideEffectValueInt()
val stringValue = sideEffectValueString()
(intValue, stringValue)
} match {
case Success(value) => Right(value)
case Failure(exception) => Left(Oops(exception))
}
}