2

次の点を考慮してください。

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 ステートメントで使用および再利用できることでした。これは不可能ですか?

4

1 に答える 1

5

関数として使用するだけでよいと思います。たとえば、次のようになります。

pf("$")

pfasを定義する場合は、PartialFunction[String, Option[String]]のような他の便利なものも使用できますpf.isDefinedAt("x")


Scala Language Specificationセクション8.4 Pattern Matching Expressionsを見ると、次の構文が見つかります。

Expr ::= PostfixExpr ‘match’ ‘{’ CaseClauses ‘}’
CaseClauses ::= CaseClause {CaseClause}
CaseClause ::= ‘case’ Pattern [Guard] ‘=>’ Block

ご覧のとおり、説明どおりに使用することは不可能ですがpf("$")、同じように機能します。

于 2011-06-03T08:39:08.887 に答える