Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在Scala中创建空元组或字符串吗?_Scala - Fatal编程技术网

我可以在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]当然是这个问题的标准解决方案,取决于你的特定用例,另一种方法是可能的。如果元组中的每个类型都构成一个幺半群,那么返回一个包含每个类型的零元素的元组可能是有意义的。“此外,您可以使用元组或多或少地做的唯一明智的事情是提取其元素。”确切地说,您可以使用元组做两件事,构造它和提取它的元素。