2017-07-07 6 views
1

を知らなければなら全く私のコードで間違って何:はスカラ:拡張機能のためのパラメータの型が欠落:無名関数の引数の型は完全に私はスカラ座に新しいですし、私は見当がつかない

私はいくつかのFutureを持っています例外をスローすることがあります。私はタイトルに指定されたエラーをコンパイル取得

clean.map(b => { 
    case true => Ok("success") 
    case false => Ok("failed") 
}).recover { 
    case t => Ok("error: " + t) 
} 

をマップしようとすると、

var clean: Future[Boolean]; 

はしかし、..私は全くと/どのPA見当がつかない私のグーグルのRTはまさにそれを引き起こします。私はグーグルではありますが、スカラの構文は非常に柔軟で、インターネット上のさまざまなバリエーションがあるため、手がかりを見つけるのはとても難しいですが、私が得るエラーはかなり誤解を招くからです。ヘルプは非常に高く評価されます...

答えて

4

書かれているように.mapに渡す関数はブール値の引数bを受け入れ、別の関数(中括弧内のもの)を返します。コンパイラはその内部関数の型を推測することができないので、知られていないパラメータ型について文句を言う。

これは本当に良いことです。なぜなら、実際に書いたかったものではないからです。

ただ、全体(b => ...)事業削除:というよりも、varcleanvalを行い、また、

clean.map { 
    case true => Ok("success") 
    case false => Ok("failed") 
}.recover { 
    case t => Ok("error: " + t) 
} 

を。変更可能な変数は良い考えではありません。 99%の時間、スカラでコードを書いたら必要ないはずだから、varというキーワードが今のところ存在しないふりをすることをお勧めします。実際には可変状態が必要なケースの1%です。私はあなたが意図を推測

+0

は、余分なアドバイスをありがとうございました! Scalaの緩い構文と柔軟性が私を抱かせてくれました。私はこのアドバイスに留意します.Btw、scalaに内部関数の型を明確に '知らせる'方法がありますか?私は 'b:ブール'または '(b:ブール=>未来[レスポンス])'を使ってみました。より多くの情報を削除することによって、いくつかの情報の「間違い」が見つからないことを「修正」することは困難です。 – Zennichimaro

+1

あなたはわかりません。あなたは「情報を取り除いて欠落を修正する」というわけではなく、完全に書かれたものの意味を変えています。 'b'は内部関数とは関係がありません(その型は実際には非常によく知られています)。あなたのコードでは2つの関数があります: 'map'に渡すものは' b'をパラメータとしてとり、もう一方の関数を返します。これは型が未知の2番目の関数です。この '.map {b => {x:Boolean => ...})'のようなものは、それを "修正"しますが、私が言ったように、これはあなたが望むものではありません。 「機能」の「未来」。 – Dima

2

clean.map(b => b match { 
case true => Ok("success") 
case false => Ok("failed") 
}).recover { 
case t => Ok("error: " + t) 
} 
+0

ありがとう!これは実際にそれをより明確にします! – Zennichimaro

関連する問題