2017-06-22 14 views
0

Scalaプログラム(これはbuild.sbtですが、質問はsbtに特有ではありません)をデバッグしようとしています。ここで特定のsbt設定に対して部分的な関数を与える必要があります。部分関数の値は次のようになります引数を部分関数に引き継ぐ

{ 
    case Regex1(a,b,c) => 
    case Regex2(d,e,f) => 
    ... 
} 

部分的な関数は私が望むことをしないので、デバッグしたかったのです。渡されたものが正確にわからないので、私は部分的な関数に渡される値を取得したいが、それを行う方法はわからない。

部分機能の先頭にcase a => println(a)を追加することができますが、これによって機能全体が中断されます。

答えて

2

あなたはこれを行うことができます:

ソリューションは、値として明示的に部分関数を作成することです

val print: PartialFunction[InputType, InputType] = { case i => println(i); i } 
print andThen { 
    case Regex1(a,b,c) => ... 
    case ... 
} 
+0

素晴らしい!まさに私が探していたもの!ありがとう! –

0

私は最終的にそれを行う方法を考え出しました。あまり優雅ではないので、誰かがより良い方法を知っている場合は、別の答えを加えてください!

val result = new PartialFunction[InputType,ResultType] { 
    def apply(value: InputType) = { 
    println("input is: " + value) // Yay, I captured the value 
    value match { 
     // Same as above 
    } 
    } 
    def isDefinedAt(value: InputType) = true 
} 
result 
0

別のオプションはすべてに一致する、とし、別の試合を追加することです実績:

{ 
    case value => { 
    println(value) 
    value match { 
     // the original partial function 
     ... 
     // you might need to add a catch-all that 
     // does nothing or returns a default value 
     case _ => None 
    } 
    } 
} 
関連する問題