我可以在Scala中创建空元组或字符串吗?
我需要返回元组,但如果出现问题,我希望返回空元组,如列表中的我可以在Scala中创建空元组或字符串吗?,scala,Scala,我需要返回元组,但如果出现问题,我希望返回空元组,如列表中的Seq.empty[Type]或Nil。可能吗? 另外,我很好奇是否可以使用字符串类型 我要返回空元组 那没有道理。元组不是集合。“空”的概念完全是非感官的。元组的长度是其类型的一部分。因此,空元组与非空元组是不同的类型 事实上,将“tuple”作为一种类型来讨论是没有意义的。有对(2元组又称为Tuple2)、三元组(3元组又称为Tuple3)、四元组、五元组、六元组、七元组、八元组、九元组、十元组等,它们都是不同的类型 同样,对于元组
Seq.empty[Type]
或Nil
。可能吗?
另外,我很好奇是否可以使用字符串类型
我要返回空元组
那没有道理。元组不是集合。“空”的概念完全是非感官的。元组的长度是其类型的一部分。因此,空元组与非空元组是不同的类型
事实上,将“tuple”作为一种类型来讨论是没有意义的。有对(2元组又称为Tuple2
)、三元组(3元组又称为Tuple3
)、四元组、五元组、六元组、七元组、八元组、九元组、十元组等,它们都是不同的类型
同样,对于元组,您可以做的唯一明智的事情就是提取它的元素。因此,对于一个没有元素的元组,您几乎无法做任何明智的事情。没有值也没有操作的结构有什么用?这完全没用 事实上,0元组与
单位
值同构,该值表示没有有用的值。在Scala和Haskell中,空元组的语法实际上用于表示单位
值:
val u = ()
// => u: Unit = ()
另外,我很好奇是否可以使用字符串类型
是的,当然,您可以有一个空字符串:
val s = ""
// => s: String = ""
因为您需要返回一个可能出错的值。在Scala中,处理此问题的推荐方法是返回选项Try或任意一个值 例如:
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))
}
}
您需要返回一个元组,但想必,您不能只返回任何元组。那么,您希望返回什么样的元组呢?如果大小改变,难道<代码> >清单>代码更合适吗?如果你想考虑另一种方法,如果你想返回1个或0个项目,使用<代码>选项[t] < /代码>。而选项[t]当然是这个问题的标准解决方案,取决于你的特定用例,另一种方法是可能的。如果元组中的每个类型都构成一个幺半群,那么返回一个包含每个类型的零元素的元组可能是有意义的。“此外,您可以使用元组或多或少地做的唯一明智的事情是提取其元素。”确切地说,您可以使用元组做两件事,构造它和提取它的元素。