我可以在Scala中创建空的元组或字符串吗?

taor4pac  于 5个月前  发布在  Scala
关注(0)|答案(3)|浏览(44)

我需要返回元组,但是如果出错了,我想返回空元组,就像列表中的Seq.empty[Type]Nil。这可能吗?我也很好奇String类型是否可能。

nkoocmlb

nkoocmlb1#

我想要返回空元组
这是没有意义的。元组不是集合。“空”的概念是毫无意义的。元组的长度是其类型的一部分。因此,空元组与非空元组是不同的类型。
事实上,把“元组”作为一种类型来讨论是没有意义的。有对(2元组,又名Tuple2),三元组(3元组,又名Tuple3),四元组,五元组,六元组,七元组,八元组,九元组,十元组等,它们都是不同的类型。
另外,或多或少,你能对元组做的唯一明智的事情就是提取它的元素。所以,对于一个没有元素的元组,你几乎没有什么明智的事情可以做。一个没有值也没有操作的结构有什么用?它完全没用。
实际上,0元组与Unit值同构,该值表示没有有用的值。在Scala和Haskell中,空元组的语法实际上用于表示Unit值:

val u = ()
// => u: Unit = ()

字符串
我也很好奇是否可以使用String类型。
是的,当然,你可以有一个空字符串:

val s = ""
// => s: String = ""

lkaoscv7

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))
  }
}

字符串

j2qf4p5b

j2qf4p5b3#

我可以在Scala中创建空元组吗?

在Scala 3中,空元组由case对象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)、以及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 *: EmptyTuplemyValue *: Tuple() .一个数字的数字。

结果的类型是Tuple1[MyValueType],也就是MyValueType *: EmptyTuple(它是NonEmptyTuple的子类型,当然,NonEmptyTuple也是Tuple的子类型)。

我可以在Scala中创建空字符串吗?

Sure的一个。

相关问题