2016-07-20 18 views
0

mavenプロジェクト(同じScalaバージョン)で使用すると列挙は期待通りに機能します。なぜスカラ列挙はApache Zeppelinでは動作しませんが、それはmavenで動作します

object t { 
    object DashStyle extends Enumeration { 
    val Solid,ShortDash = Value 
    } 

    def f(style: DashStyle.Value) = println(style) 

    def main(args: Array[String]) = f(DashStyle.Solid) 
} 

しかし、それは、Apacheツェッペリン(ツェッペリン0.6、1.6スパーク、スカラ座2.10、Javaの1.8)に

object DashStyle extends Enumeration { 
    val Solid,ShortDash = Value 
} 

def f(style: DashStyle.Value) = println(style) 

f(DashStyle.Solid) 

を実行したときにそれは言っても、次のエラーを報告した、必要なタイプがまったく同じです

<console>:130: error: type mismatch; 
found : DashStyle.Value 
required: DashStyle.Value 
       f(DashStyle.Solid) 

どうすれば使用できますか?

+0

を、それを使用ツェッペリンの段落で

object t { object DashStyle extends Enumeration { val Solid,ShortDash = Value } def f(style: DashStyle.Value) = println(style) } 

をオブジェクト内の列挙を定義しますか。 – pedrofurla

+0

もう一つの注意点として、私はScala Enumerationsの使用をお勧めしません。彼らは悪名高いバグです。私はADTを使用することをお勧めします。 – pedrofurla

+0

Sparkの[見つかったデータ型と必要なデータ型が同じで、エラー:型が一致しません](http://stackoverflow.com/questions/37476790/error-type-mismatch-in-spark-with-same-found-and) -required-datatypes) – zero323

答えて

1

私はこの問題を解決するためにトリックを考え出しました。

Apache Zeppelin(またはScala REPL)。 Enumerationまたはsealed &オブジェクトを使用するには、オブジェクトにラップする必要がありますが、ルートスコープで直接定義することはできません。

私がMavenで動作する理由は、すでにオブジェクトに入れているからです。

そして、ScalaのバージョンあなたのMavenプロジェクトは何ですか?ツェッペリンの段落で

import t._ 
f(DashStyle.Solid) 
関連する問題