【发布时间】:2015-06-24 21:25:35
【问题描述】:
是否有可能以某种方式将 PartialFunction(我们假设它始终只包含一个案例)编组为 人类可读的?
假设我们有 Any 类型的集合(消息:List[Any]) 以及使用模式匹配块定义的 PartialFuntion[Any, T] 的数量。
case object R1
case object R2
case object R3
val pm1: PartialFunction[Any, Any] = {
case "foo" => R1
}
val pm2: PartialFunction[Any, Any] = {
case x: Int if x > 10 => R2
}
val pm3: PartialFunction[Any, Any] = {
case x: Boolean => R3
}
val messages: List[Any] = List("foo", 20)
val functions = List(pm1, pm2)
然后我们可以找到所有与提供的PF和相关应用程序匹配的消息
val found: List[Option[Any]] = functions map { f =>
messages.find(f.isDefined).map(f)
}
但是,如果我需要以 人类可读 形式(用于记录)的“我期望的”到“我所拥有的”的结果映射怎么办。说吧,
(case "foo") -> Some(R1)
(case Int if _ > 10) -> Some(R2)
(case Boolean) -> None
这可能吗?某些宏/元有效?
【问题讨论】:
-
好主意。我不得不说更多评论......显然,替代方案是其他副作用。
标签: scala pattern-matching human-readable