2016-04-27 12 views
-1

パターンマッチング私は配列を持っているときのように:Scalaの配列[タイプ]エラー

def myMethod(mySeq: Seq[SomeType]) = mySeq match { 
    case Nil => // do someting 
    case _ => // do something else (error happens here) 
} 

私はこのコードを実行すると、私は次のエラーを取得:私はこのエラーを見たことがない

a type was inferred to be `Any`; this may indicate a programming error 

をこれまで。私はScala 2.11を使っています。私はこのエラーが何であるかについては断然ですか?すべての手がかりは?

編集:ここで私が質問の下に持っている実際のメソッドです:

[warn] Scala version was updated by one of library dependencies: 
[warn] * org.scala-lang:scala-library:(2.11.1, 2.11.7, 2.11.2, 2.11.6, 2.11.5, 2.11.0) -> 2.11.8 
[warn] To force scalaVersion, add the following: 
[warn] ivyScala := ivyScala.value map { _.copy(overrideScalaVersion = true) } 
[warn] Run 'evicted' to see detailed eviction warnings 

が、私はまだ、このエラーを取得:ここ

def publishMessages(mySeq: Seq[MyData]): Future[Continue] = Future { 

    if (mySeq.nonEmpty) { 
     logger.info(s"sending a total of ${mySeq.length} for " + 
     s"metric ${mySeq.head.metric} messages to kafka topic ${producerConfig.topic}") 

     val jsonMessage = Json.stringify(Json.toJson(mySeq)) 
     val recordMetaDataF = Future { 
     scala.concurrent.blocking { 
      val recordMetaDataJavaFut = producer.send(
      new ProducerRecord[String, String](producerConfig.topic, jsonMessage) 
     ) 
      // if we don't make it to Kafka within 3 seconds, we timeout 
      recordMetaDataJavaFut.get(3, TimeUnit.SECONDS) 
     } 
     } 

     recordMetaDataF.recover { 
     case NonFatal(ex) => 
      logger.error("Exception while persisting data-points to kafka", ex) 
     } 
     Continue 
    } 
    else { 
     logger.debug(s"skip persisting to kafka topic ${producerConfig.topic} as no " + 
     " data-points were given to persist") 
     Continue 
    } 
    } 

は私がコンパイル時に参照警告です

a type was inferred to be `Any`; this may indicate a programming error 
+3

何をしようとしていますか? –

+0

なぜそれが重要なのでしょうか?両方のパスは、正しい型と同じ型を返します。 IntelliJはこの方法に不平を言うことはありません! – sparkr

+1

あなたが投稿したコードは空白のコメントで何かを推論する必要はないので、エラーは発生しません。 –

答えて

3

これは、アプリで「何か」が意味することと関係しています。

scala> def myMethod(mySeq: Seq[String]) = mySeq match { 
|  case Nil => "" 
|  case _ => 12 
|  } 
myMethod: (mySeq: Seq[String])Any 

scala> def myMethod(mySeq: Seq[String]) = mySeq match { 
|  case Nil => "" 
|  case _ => "123" 
|  } 
myMethod: (mySeq: Seq[String])String 

あなたが最初のケースで見ることができるように種類が整列しないと、コンパイラによって推測戻り値の型が第二に、彼らは両方の文字列と返されたタイプがStringでは、Anyでは、明示的に注釈を付ける必要がありますそれはおそらくコンパイルされません(それがAnyでない限り)。

+0

私の投稿を編集しました!私はまだこの奇妙なエラーが発生します! – sparkr

+0

あなたの編集は何も間違っていますが、間違った行を見ているだけで、あなたが投稿したコードが不完全であると思われます。そうでなければ、警告は表示されず、タイプが一致しないため、 ( 'Any'メッセージは、フラグを特定の方法で設定しない限り、エラーではなく警告です)。 –

関連する問題