2017-01-08 7 views
0

Ich habe eine Anwendung mit einem Fall Klasse case class Test(name: String, flag: Boolean) und bei dem Versuch, erhalte ich die folgende Fehlermeldung zu kompilieren:Scala Typenkonflikt auf Wertfunktion

[error] found : String => Boolean 
[error] required: Boolean 

Hier ist der Code, der den Fehler zu werfen:

val flag = (input: String) => try { 
    if(input.toInt == 1) true else false 
} catch {case e: NumberFormatException => false} 

Ist es möglich, dies zu beheben, oder muss ich einen anderen Ansatz wählen?

+0

Der von Ihnen gepostete Code sollte selbst keinen Fehler enthalten. Wenn Sie jedoch versuchen, einen "Test" zu instanziieren, indem Sie "Test (" irgendein Name ", Flag)" ausführen, wird dies fehlschlagen, weil "flag" eine Funktion ist. Die 'Test' Klasse benötigt einen booleschen Wert. – marstran

+0

Ich versuche etwas wie 'Test (" irgendein Name "," 1 ")' 'zu machen und möchte ein Objekt von' Test ("irgendein Name", wahr) zurückgeben '. – bokoxev

Antwort

2

Sie müssen die flag -Funktion aufrufen, die Sie bei der Instanziierung eines neuen Objekts vom Typ Test erstellt haben. Wie folgt aus:

Test("some name", flag("1")) 

Eine weitere Option ist der Konstruktor in der Test -Klasse zu überlasten:

case class Test(name: String, flag: Boolean) 
    def this(name: String, input: String) = this(name, Test.flag(input)) 
} 

object Test { 
    def flag(input: String) = (input: String) => try { 
     if(input.toInt == 1) true else false 
    } catch { case e: NumberFormatException => false } 
} 

können Sie dann Test("some name", "1") einfach anrufen Test("some name", true) zu bekommen.

+0

Das scheint auch nicht zu funktionieren. Es wird ein 'error: not found: value flag' Fehler ausgegeben. – bokoxev

+0

Während das überladene Konstruktorbeispiel, das Sie zur Verfügung gestellt haben, immer noch Fehler wirft, konnte ich meine Flagfunktion aufrufen und es funktionierte - ich habe beim ersten Mal etwas gefingert. – bokoxev

+0

Hoppla, die Flag-Methode sollte im Companion-Objekt von 'Test' stehen. – marstran