2016-07-20 26 views
0

Enumeration funktioniert wie erwartet, wenn ich es in einem Maven-Projekt (mit der gleichen Scala-Version) verwenden.Warum Scala Enumeration funktioniert nicht in Apache Zeppelin, aber es funktioniert in 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) 
} 

Aber wenn es läuft in Apache Zeppelin (Zeppelin 0,6 Spark 1.6, Scala 2.10, Java 1,8)

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

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

f(DashStyle.Solid) 

Es meldet folgende Fehler selbst sagt, es gefunden und erforderlich Typ ist genau das gleiche

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

Warum und wie soll ich es verwenden?

+0

Was ist die Scala Version Ihres Maven-Projekt? – pedrofurla

+0

Auf einer anderen Anmerkung empfehle ich Scala Enumerations nicht, sie sind notorisch fehlerhaft. Ich empfehle die Verwendung von ADTs. – pedrofurla

+0

Mögliches Duplikat von ["error: type mismatch" in Spark mit den gleichen gefundenen und benötigten Datentypen] (http://stackoverflow.com/questions/37476790/error-type-mismatch-in-spark-with-same-found-and - benötigte Datentypen) – zero323

Antwort

1

Ich fand den Trick, um dieses Problem zu lösen.

In Apache Zeppelin (oder Scala REPL). Um Enumeration oder ein versiegeltes Objekt & zu verwenden, sollte es in ein Objekt eingebettet, aber nicht direkt im Bereich root definiert werden.

Der Grund, warum es in Maven funktioniert, ist, dass ich es bereits in ein Objekt legte.

definiert Aufzählung in einem Objekt in einem Zeppelin Absatz

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

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

es dann in einem Absatz Zeppelin verwenden

import t._ 
f(DashStyle.Solid)