我需要返回元组,但是如果出错了,我想返回空元组,就像列表中的Seq.empty[Type]或Nil。这可能吗?我也很好奇String类型是否可能。
Seq.empty[Type]
Nil
nkoocmlb1#
我想要返回空元组这是没有意义的。元组不是集合。“空”的概念是毫无意义的。元组的长度是其类型的一部分。因此,空元组与非空元组是不同的类型。事实上,把“元组”作为一种类型来讨论是没有意义的。有对(2元组,又名Tuple2),三元组(3元组,又名Tuple3),四元组,五元组,六元组,七元组,八元组,九元组,十元组等,它们都是不同的类型。另外,或多或少,你能对元组做的唯一明智的事情就是提取它的元素。所以,对于一个没有元素的元组,你几乎没有什么明智的事情可以做。一个没有值也没有操作的结构有什么用?它完全没用。实际上,0元组与Unit值同构,该值表示没有有用的值。在Scala和Haskell中,空元组的语法实际上用于表示Unit值:
Tuple2
Tuple3
Unit
val u = () // => u: Unit = ()
字符串我也很好奇是否可以使用String类型。是的,当然,你可以有一个空字符串:
val s = "" // => s: String = ""
型
lkaoscv72#
因为你需要返回一个可能出错的值。在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)) } }
字符串
j2qf4p5b3#
在Scala 3中,空元组由case对象EmptyTuple表示,空元组也由Tuple()返回(即Tuple.apply(),不带参数)。
EmptyTuple
Tuple()
Tuple.apply()
val v = Tuple() println(v == EmptyTuple) // true println(v.isInstanceOf[Tuple]) // true println(v.productArity) // 0
字符串此外(离题),您可以通过以下任何方式创建大小为1的元组:
Tuple(myValue)
Tuple.apply(myValue)
Tuple.apply[MyValueType](myValue)
Tuple1(myValue)
Tuple1[MyValueType](myValue)
myValue *: EmptyTuple
myValue *: Tuple()
结果的类型是Tuple1[MyValueType],也就是MyValueType *: EmptyTuple(它是NonEmptyTuple的子类型,当然,NonEmptyTuple也是Tuple的子类型)。
Tuple1[MyValueType]
MyValueType *: EmptyTuple
NonEmptyTuple
Tuple
Sure的一个。
3条答案
按热度按时间nkoocmlb1#
我想要返回空元组
这是没有意义的。元组不是集合。“空”的概念是毫无意义的。元组的长度是其类型的一部分。因此,空元组与非空元组是不同的类型。
事实上,把“元组”作为一种类型来讨论是没有意义的。有对(2元组,又名
Tuple2
),三元组(3元组,又名Tuple3
),四元组,五元组,六元组,七元组,八元组,九元组,十元组等,它们都是不同的类型。另外,或多或少,你能对元组做的唯一明智的事情就是提取它的元素。所以,对于一个没有元素的元组,你几乎没有什么明智的事情可以做。一个没有值也没有操作的结构有什么用?它完全没用。
实际上,0元组与
Unit
值同构,该值表示没有有用的值。在Scala和Haskell中,空元组的语法实际上用于表示Unit
值:字符串
我也很好奇是否可以使用String类型。
是的,当然,你可以有一个空字符串:
型
lkaoscv72#
因为你需要返回一个可能出错的值。在Scala中,推荐的处理方法是返回一个Option,Try或Either值。
例如:
字符串
j2qf4p5b3#
我可以在Scala中创建空元组吗?
在Scala 3中,空元组由case对象
EmptyTuple
表示,空元组也由Tuple()
返回(即Tuple.apply()
,不带参数)。字符串
此外(离题),您可以通过以下任何方式创建大小为1的元组:
Tuple(myValue)
、Tuple.apply(myValue)
、Tuple.apply[MyValueType](myValue)
、以及Tuple(myValue)
、Tuple.apply(myValue)
、Tuple(myValue)
、Tuple(myValue)
、Tuple.apply(myValue)
、Tuple.apply(myValue)
、Tuple.apply(myValue)
、Tuple(myValue)
、Tuple(myValue)
、Tuple(myValue)
、Tuple(myValue)
、Tuple.apply(myValue)
、Tuple.apply[MyValueType](myValue)
、Tuple1(myValue)
、Tuple1[MyValueType](myValue)
、以及Tuple1(myValue)
的每一个都可以是相同的,myValue *: EmptyTuple
,myValue *: Tuple()
.一个数字的数字。结果的类型是
Tuple1[MyValueType]
,也就是MyValueType *: EmptyTuple
(它是NonEmptyTuple
的子类型,当然,NonEmptyTuple
也是Tuple
的子类型)。我可以在Scala中创建空字符串吗?
Sure的一个。