2017-05-19 3 views
0

私はこれを行うにしようとしています、文字列をIntに変換しようとしているときに、拡張関数のパラメータ型が見つからないという問題に直面しています。なぜ、どのように解決するのですか?

val ck : String => Integer = {_ match {case _=> _.toInt}} 

が、それは拡張機能((X $ 2)=> $ 2.toInt x)の

はなぜこれを行うためにエラーに

欠落しているパラメータの種類をスローします起こる?どのように解決するのですか? 「それを修正する方法」に

+0

関数を 'val ck:String => Integer = _ match {case x:String => x.toInt}'に変更すると動作します。特定のニーズに合わせて質問を更新すると、すべてのヘルプが得られます。 –

答えて

0

回答は非常に単純です:長い「なぜ」に

val k: String => Int = _.toInt 

回答。あなたのコードが口頭で説明するようにしようと思います。

_ match { // Match function parameter to 
    _ /* Any value */ => _.toInt // And return a lambda function 
           //which accepts a param and calls toInt on it 
} 

だからあなたの式の型はA => (B => C)です - あなたはタイプAのいくつかの値を受け入れ、Cを入力するためにいくつかの他のタイプのBから機能を返す機能を持っています。 Scalaコンパイラが与えられた型を推定しようとすると、結果はString => Intになります。失敗し、このメッセージが返されます。

関連する問題