如何从方法中返回可选信息?

zig*_*tar 12 scala

一般的问题是除了计算的实际结果之外,如何从方法返回附加信息.但我想,这些信息可以默默地被忽略.

就拿方法dropWhileIterator.返回的结果是变异的迭代器.但也许有时我可能会对丢弃的元素数量感兴趣.

在这种情况下dropWhile,可以通过向迭代器添加索引并计算之后丢弃的步骤数来在外部生成此信息.但总的来说这是不可能的.

我简单的解决方案是返回一个包含实际结果和可选信息的元组.但是每当我调用方法时我都需要处理元组 - 即使我对可选信息不感兴趣.

所以问题是,是否有一些聪明的方式来收集这些可选信息?

也许通过Option[X => Unit]带有回调函数的参数默认为None?有更聪明的东西吗?

Jea*_*let 15

这是我的两分钱......

你可以声明这个:

case class RichResult[+A, +B](val result: A, val info: B)
Run Code Online (Sandbox Code Playgroud)

隐式转换为A:

implicit def unwrapRichResult[A, B](richResult: RichResult[A, B]): A = richResult.result
Run Code Online (Sandbox Code Playgroud)

然后:

def someMethod: RichResult[Int, String] = /* ... */

val richRes = someMethod
val res: Int = someMethod
Run Code Online (Sandbox Code Playgroud)


kas*_*ens 5

它绝对不是更聪明,但你可以创建一个删除附加信息的方法.

def removeCharWithCount(str: String, x: Char): (String, Int) =
  (str.replace(x.toString, ""), str.count(x ==))

// alias that drops the additional return information
def removeChar(str: String, x: Char): String =
  removeCharWithCount(str, x)._1
Run Code Online (Sandbox Code Playgroud)