Scala 如何定义空元组?

Scala 如何定义空元组?,scala,Scala,我有以下函数定义: private def extractUrl: String => (String, String) = url => url .split("/") .toList .filter(_.startsWith("localhost")) .flatMap(e => e.split(":").toList) .foldLeft[(String, String)](("", "")) {

我有以下函数定义:

  private def extractUrl: String => (String, String)
  = url =>
    url
      .split("/")
      .toList
      .filter(_.startsWith("localhost"))
      .flatMap(e => e.split(":").toList)
      .foldLeft[(String, String)](("", "")) { (acc, x) =>
        acc match {
          case ("", "") => (x, "")
          case (a, "") => (a, x)
          case z => z

        }

      }

问题是,有没有其他方法来定义空元组而不是?

我认为不可能定义空元组

我尝试使用->但它解析为Tuple2.type,而不是Tuple2

如果元组的值是可选的,请使用类型系统表示: 选项[String],选项[String]

更好的是,您可以为数据结构定义一个案例类: case class HostAndPorthost:Option[String],port:Option[String]

空元组 ,是一个空字符串的元组,类型为String,String。 空在该上下文中不清楚,可以是None、None甚至null、null bad

您似乎使用来表示一个不存在的值。尝试使用选项[String]的两个子类型None和Some[String]来指示值不存在

分析和评论 潜在地,您的方法似乎不符合预期。执行下面的代码 考虑使用已有的函数/方法/库来操作URL,另请参见下面的示例 考虑使用选项 屈服

Your approach
(localhost,4000)
(localhostb,)
New approach
HostPort(localhost,Some(4000))

不,我知道,空元组是单位。但它们会有不同的类型。但是,似乎您有一个包含两个或更多元素的列表,并且您想要前两个元素,对吗?函数按预期工作。我只是好奇,如何创建空元组我们的元组不是空的,它包含两个空字符串实例@LuiMigueleMeJiasasaRez是正确的。你可以考虑String=选项[String,String ],而不是很高兴它对你有用,但是你的代码做了各种各样毫无意义的事情。你可以考虑把它放在上面。我认为不可能定义一个空元组。谈论空元组是没有意义的。空元组是唯一的,只能有一个。不过,它通常被称为单位值,而不是空元组。它通常使用元组语法编写,包括在Scala中:是空元组值,Scala.Unit是空元组类型。
Your approach
(localhost,4000)
(localhostb,)
New approach
HostPort(localhost,Some(4000))