考虑以下因素:
scala> object Currency extends Enumeration {
| type Currency = Value
| val USD = Value
| val GBP = Value
| val EUR = Value
| val TRY = Value // Turkish lira
| val NGN = Value // Nigerian naira
| }
defined module Currency
scala> import Currency._
import Currency._
scala> val pf: (String) => Option[Currency] = {
| case "$" => Some(USD)
| case "€" => Some(EUR)
| case "£" => Some(GBP)
| case "₦" => Some(NGN)
| case _ => None
| }
pf: (String) => Option[Currency.Currency] = <function1>
我想我可以做到这一点:
scala> "$" match pf
<console>:1: error: '{' expected but identifier found.
"$" match pf
^
但是没有。我在这里缺少一些基本的东西吗?我希望我的 PartialFunction 可以在 match 语句中使用和重用。这不可能吗?
最佳答案
我认为你只需要使用它作为一个函数,例如:
pf("$")
如果您将 pf
定义为 PartialFunction[String, Option[String]]
您还可以使用其他有用的东西,例如 pf.isDefinedAt("x")
。
如果您查看Scala 语言规范部分8.4 模式匹配表达式,您会发现以下语法:
Expr ::= PostfixExpr ‘match’ ‘{’ CaseClauses ‘}’
CaseClauses ::= CaseClause {CaseClause}
CaseClause ::= ‘case’ Pattern [Guard] ‘=>’ Block
因此,如您所见,不可能按照您所描述的方式使用它,但 pf("$")
的行为方式相同。
关于scala - 如何使用 PartialFunctions 来编写匹配语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6224729/