2016-07-28 6 views
1

Scalaでは、部分的な機能は、ここでスカラの部分関数に複数のパラメータを渡して何かを返すことは可能ですか?

val test: PartialFunction[Int, Boolean, String] = { case d: Int if d > 0 => "one" } 

test(0, true) 

として、変換するために、複数のPARAMTERを受け入れることができる場合、私が知っているに興味がある、私はそれを再評価することができるようにint型とboolean型の値を渡したいですこれは可能ですか?コメントで述べ@alextscとして

+1

1つのオプションは、 '(Int、Boolean)'タプルを使用することです。 – alextsc

答えて

1

、関数の入力タイプとしてタプルを使用:

val test: PartialFunction[(Int, Boolean), String] = { 
    case (d, b) if (d > 0) && b => "one" 
} 

test((0, true)) // or test(0 -> true) 

あなたがより高いアリティタプルタイプを使用して、任意の数の引数(ほとんど)にこれをスケールアウトすることができ:

val test4: PartialFunction[(A, B, C, D), String] = { 
    case (a, b, c, d) => s"$a, $b, $c, $d" 
} 
test4((new A, new B, new C, new D)) 
+0

余分な括弧は必要ありません。 'test(...)'はうまく動作します。 – jwvh

+0

@jwvhですが、2つ(または4つ)の個別の引数を渡すのではなく、タプルを渡しているという事実を強調するために、私の例で余分な括弧を残すことにします。 – Dylan

+1

@jwvh自動チューリングは廃止され、今後削除される予定です。 – wheaties

1

PartialFunctionの目的を見ても意味がありません。基本的には、マッチケースのステートメントでParitalを暗黙的に使用します。 @Dylanは既にTuple型を使用することができますが、PartialFunctionsのような種類のケースクラスを使用することもできます。

case class Func3[A,B,C](x:A, y:B, z:C) 

val p:PartialFunction[Func3[Int, Int, Int], String] = { 
    case Func3(a, b, c) => (a+b+c).toString 
} 

p(Func3(1,2,3)) 

この例によると、タプルは、より理にかなって。しかし、おそらくそれはあなたのアプリケーションの設計に利益をもたらすでしょう。

関連する問題