【问题标题】:scala returning tuples from functionsscala从函数返回元组
【发布时间】:2011-07-27 08:59:16
【问题描述】:

假设我有这样的事情:

def f () = {

   var v = someLookupToV()

   match v {
       case Some(v) => (v.id, someOtherLookup(v.id))
       case None => None // <<-- doesn't work, but I'm not sure what to put there!
   }

}

有点假设 someLookupToV 返回一些对象,它有一个字段 id,然后我有一些基于 v.id 的其他查找。我想将两个值作为元组返回。但是如果 Some(v) 不匹配,我该怎么办?我要返回什么? None 和 (None,None) 没有用。 Scala 接受了 (null,null) 但我不知道这是否是正确的做法......

【问题讨论】:

  • null 存在于 Scala 中主要是为了与 Java 的互操作性。最好尽可能避免使用OptionSomeNone,当您的值可能为空时。

标签: scala scala-2.8


【解决方案1】:

我不会让函数返回(Int, Option[Int]),而是Option[(Int, Option[Int])]

def f = someLookupToV match {
  case Some(v) => Some(v.id, someOtherLookup(v.id))
  case None => None
}

或者,稍微短一点:

def f = someLookupToV.map(v => (v.id, someOtherLookup(v.id)))

【讨论】:

    【解决方案2】:

    如果你想返回 (None, None),你的 "case Some" 行需要返回一个 (Option, Option) 的元组。

    如您的示例中所写,您的 case Some 正在返回 (Int, Option)。假设您的 v.id 是一个 Int 并且 someOtherLookup 返回一个 Option。

    【讨论】:

      猜你喜欢
      • 2011-02-14
      • 2018-08-21
      • 2016-11-17
      • 1970-01-01
      • 2016-03-26
      • 2022-01-27
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      相关资源
      最近更新 更多