2016-10-31 1 views
1

Okay, also ich bin ein Anfänger in Scala und ich muss None in einer if-else-Funktion zurückgeben. Aber ich werde immer diese Fehlermeldung erhalten:Wie wird None zurückgegeben, wenn der Parameter doppelt ist?

<console>:42: error: type mismatch; found : None.type required: Double return None

gibt es eine Möglichkeit für mich, dieses Problem zu lösen?

Update: das sind meine Codes

def get_grid_parameters(params: Double): Double = { 


if (params == "edge_lating") { 
    return grid_hex_edge_length_latlng 
} 

    else if (params == "grid_bottom_left_lat") { 
     return grid_bottom_left_lat 
} 
    else if (params == "grid_bottom_left_lng") { 
     return grid_bottom_left_lng 
} 
    else if (params == "edge_metres") { 
     return latlng_diff_to_metres(grid_hex_edge_length_latlng) 
} 
    else if (params == "hex_height") { 
     return 0.002598076211353316 
} 
    else if (params == "increment_lng") { 
     return 0.002250 
} 
    else if (params == "increment_lat") { 
     return 0.001299038105676658 
} 
    else { 
     print("Invalid parameters!") 
     return None 
} 

} 
+0

Wo ist Ihre Funktion (Code auch anzeigen)? – pamu

+0

@pamu Blick auf das Update – nsbr11

Antwort

3

Ändern Sie den Rückgabetyp der Funktion Option[Double]. return ist optional in Scala. params sollte String

def get_grid_parameters(params: String): Option[Double] = { 


if (params == "edge_lating") { 
    Some(grid_hex_edge_length_latlng) 
} 

    else if (params == "grid_bottom_left_lat") { 
     Some(grid_bottom_left_lat) 
} 
    else if (params == "grid_bottom_left_lng") { 
     Some(grid_bottom_left_lng) 
} 
    else if (params == "edge_metres") { 
     Some(latlng_diff_to_metres(grid_hex_edge_length_latlng)) 
} 
    else if (params == "hex_height") { 
     Some(0.002598076211353316) 
} 
    else if (params == "increment_lng") { 
     Some(0.002250) 
} 
    else if (params == "increment_lat") { 
     Some(0.001299038105676658) 
} 
    else { 
     print("Invalid parameters!") 
     return None 
} 

} 

Sie sein Muster seine freiere

def getGridParams(param: String): Option[Double] = param match { 
case "edge_lating" => Some(grid_hex_edge_length_latlng) 
case "grid_bottom_left_lat" => Some(grid_bottom_left_lat) 
case "grid_bottom_left_lng" => Some(grid_bottom_left_lng) 
case "edge_metres" => Some(latlng_diff_to_metres(grid_hex_edge_length_latlng)) 
case "hex_height" => Some(0.002598076211353316) 
case "increment_lng" => Some(0.002250) 
case "increment_lat" => Some(0.001299038105676658) 
case _ => None 
} 

Erklärung verwenden können passend:

In Scala kein Wert erfasst wird mit None und einige Wert Fall modelliert Some(value) mit . Option ist der Supertyp None und Some. So können einige und keine Werte direkt der Variablen zugewiesen werden, deren Typ Option[T] ist.

Beispiel:

scala> val a: Option[Int] = None 
a: Option[Int] = None 

scala> val a: Option[Int] = Some(1) 
a: Option[Int] = Some(1) 

scala> def toInt(str: String): Option[Int] = { 
    | if (str.forall(_.isDigit)) Some(str.toInt) 
    | else None 
    | } 
toInt: (str: String)Option[Int] 

scala> toInt("123a") 
res0: Option[Int] = None 

scala> toInt("123") 
res1: Option[Int] = Some(123) 

Im obigen Beispiel, wenn der String enthält Zeichen wir keine zurück, wenn nicht wir einige (Wert) zurück. Sehen Sie sich den Rückgabetyp toInt an, der Option [Int] ist

+0

Ich habe eine Warnung, die besagt, dass "Werte der Typen Double und String mit' == 'wird immer falsch ergeben " – nsbr11

+0

@ nsbr11 hinzugefügt Mustererkennung Lösung Bitte überprüfen Sie – pamu

+0

oh es funktioniert! Danke! – nsbr11

Verwandte Themen