"Two" case3=>"T"/> "Two" case3=>"T">
部分関数 (部分関数) は数学的な概念であり、「関数」の一種ではなく、関数と並列する概念です。
Scala の Partia 関数は、型が PartialFunction[A,B] であるトレイトで、型 A のパラメーターを受け取り、型 B の結果を返します。
例:
val pf: PartialFunction[Int, String] = { case 1 => "One" case 2 => "Two" case 3 => "Three" case _ => "Other" } println(pf(1)) //One println(pf(2)) //Two println(pf(3)) //Three println(pf(4)) //Other
部分関数内には、isDefinedAt、OrElse、andThen、applyOrElse などのメソッドがいくつかあります。
isDefinedAt: この関数の機能は、受信パラメータがこの部分関数によって処理される範囲内にあるかどうかを判断することです。
定義したばかりの pf で isDefinedAt() を使用してみます。数字であれば、__=>"Other" の場合もあるので、これは正しいです。別のタイプに変更すると、エラーが報告されます。
val pf: PartialFunction[Int, String] = { case 1 => "One" case 2 => "Two" case 3 => "Three" case _ => "Other" } println(pf.isDefinedAt(1)) //true println(pf.isDefinedAt(2)) //true println(pf.isDefinedAt(3)) //true println(pf.isDefinedAt(4)) //true println(pf.isDefinedAt("1")) /** * 类型不匹配 * type mismatch; * found : String("1") * required: Int * println(pf.isDefinedAt("1")) */
orElse: 複数の部分関数を組み合わせて使用すると、case ステートメントと同様の効果が得られます。
val onePF: PartialFunction[Int, String] = { case 1 => "One" } val twoPF: PartialFunction[Int, String] = { case 2 => "Two" } val threePF: PartialFunction[Int, String] = { case 3 => "Three" } val otherPF: PartialFunction[Int, String] = { case _ => "Other" } val newPF = onePF orElse twoPF orElse threePF orElse otherPF println(newPF(1)) //One println(newPF(2)) //Two println(newPF(3)) //Three println(newPF(4)) //Other
このように、newPF は元の PF と同じ効果を持ちます。
andThen: g(f(x)) などのメソッドの連続呼び出しと同等。
pf1 の結果の戻り値の型は、pf2 のパラメーター入力の型と一致している必要があります。そうでない場合は、エラーが報告されます。
val pf1: PartialFunction[Int, String] = { case i if i == 1 => "One" } val pf2: PartialFunction[String, String] = { case str if str eq "One" => "The num is 1" } val num = pf1 andThen pf2 println(num(1)) //The num is 1
applyOrElse: 2 つのパラメーターを受け取ります。1 つ目は呼び出しパラメーター、2 つ目はコールバック関数です。最初の呼び出しのパラメータが一致する場合は、一致する値が返され、一致しない場合はコールバック関数が呼び出されます。
val pf: PartialFunction[Int, String] = { case 1 => "One" } println(pf.applyOrElse(1, { num: Int => "two" })) //One println(pf.applyOrElse(2, { num: Int => "two" })) //two
部分応用関数(Partial Applied Function)は部分応用関数とも呼ばれ、Partial Functionの英語名から判断すると一字違いですが、両者の間には雲泥の差があります。
部分アプリケーション関数とは、関数に n 個のパラメーターがあることを意味します。関数に n 未満のパラメーターを指定すると、部分アプリケーション関数が得られます。
たとえば、3 つのパラメーターを持つ関数を定義し、1 ~ 2 つの既知のパラメーターを持ついくつかの部分的なアプリケーション関数を提供します
def add(x: Int, y: Int, z: Int) = x + y + z // x 已知 def addX = add(1, _: Int, _: Int) println(addX(2, 3)) //6 println(addX(3, 4)) //8 // x 和 y 已知 def addXAndY = add(10, 100, _: Int) println(addXAndY(1)) //111 // z 已知 def addZ = add(_: Int, _: Int, 10) println(addZ(1, 2)) //13
以上がJava と Scala での部分関数と部分応用関数の使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。