2017-12-25 13 views
0

私の問題の背景は次のとおりです:Scala - エラー処理にTry、Success、Failureを使用するときに変数を宣言しますか?

データに線形回帰モデルを適用しようとしていますが、データが必要な形式で表示されないと、モデルは例外エラーをスローします。成功した場合は、出力の残差を新しい変数として保存しますが、失敗した場合は、代わりに新しい変数としてゼロの配列を定義します。

私の問題は、関数の成功または失敗に応じてこの変数を宣言できないということです。

次のように具体的には、モデルが呼び出されます。

import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression 
import org.apache.commons.math3.stat.regression.AbstractMultipleLinearRegression 
import scala.util.{Try,Success,Failure} 

val model=new OLSMultipleLinearRegression() 
val goodData=Array(Array(.1),Array(.2)) 
val badData=Array(Array(.1,.1),Array(.2,.2)) 
val y=Array(.5,.6) 

次はMathIllegalArgumentException

model.newSampleData(y,badData) 

例外エラーを生成するが、そこにいる場合、これは正常な動作

model.newSampleData(y,goodData) 

を生み出します私は変数を宣言したい例外エラーですval params=Array.fill(2)(0.0)しかし例外エラーがなければ、変数val params=model.estimateResiduals()を宣言したいと思います。

TrySuccessFailureを使用して)私の試みは次のとおりです。

Try{model.newSampleData(y,badData)} match { 
case Success(_)=>val params=model.estimateResiduals() 
case Failure(_)=>val params=Array.fill(2)(0.0) 
} 

が、私はparamsを入力すると、私はエラーerror: not found: value paramsを取得します。

変数paramsを宣言するには、線形回帰法の成功または失敗を教えてください。

答えて

2

宣言している変数は、ブロックに対してローカルです。使用

val params = Try{model.newSampleData(y,badData)} match { 
    case Success(_) => model.estimateResiduals() 
    case Failure(_) => Array.fill(2)(0.0) 
} 

か、単に

val params = Try(model.newSampleData(y,badData)) 
    .map(_ => model.estimateResiduals()) 
    .getOrElse(Array.fill(2)(0.0)) 
+0

ニース、ありがとうございました! – user322778

関連する問題