Scala 参数为double时如何返回None?

Scala 参数为double时如何返回None?,scala,Scala,好的,我是Scala的初学者,我需要在if-else函数中不返回任何值。但我总是会遇到这样的错误: :42:错误:类型不匹配; 找到:无 所需:双人 返回无 我有办法解决这个问题吗 更新:这些是我的代码 def get_grid_parameters(params: Double): Double = { if (params == "edge_lating") { return grid_hex_edge_length_latlng } else if (params ==

好的,我是Scala的初学者,我需要在if-else函数中不返回任何值。但我总是会遇到这样的错误:

:42:错误:类型不匹配;
找到:无
所需:双人
返回无

我有办法解决这个问题吗

更新:这些是我的代码

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
}

}

将函数的返回类型更改为
选项[Double]
<代码>返回在Scala中是可选的<代码>参数应为
字符串

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
}

}
您可以使用模式匹配,它更清晰

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
}
说明:

在Scala中,没有使用
None
捕获值,一些值案例使用
some(value)
建模
选项是超级类型None和Some。因此,如果
选项[T]
,可以将一些值和无值直接指定给其类型的变量

例如:

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)

在上面的示例中,如果字符串包含字符,则返回None,否则返回一些(值)。查看
toInt
的返回类型,即选项[Int]

将函数的返回类型更改为
选项[Double]
<代码>返回
在Scala中是可选的<代码>参数应为
字符串

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
}

}
您可以使用模式匹配,它更清晰

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
}
说明:

在Scala中,没有使用
None
捕获值,一些值案例使用
some(value)
建模
选项是超级类型None和Some。因此,如果
选项[T]
,可以将一些值和无值直接指定给其类型的变量

例如:

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)

在上面的示例中,如果字符串包含字符,则返回None,否则返回一些(值)。查看
toInt
的返回类型,即选项[Int]

您的函数(也显示代码)在哪里?@pamu查看更新您的函数(也显示代码)在哪里?@pamu查看更新我收到一条警告,指出“使用“==”比较类型Double和字符串的值将始终产生false”@nsbr11添加了模式匹配解决方案请检查谢谢您也提供了模式匹配解决方案!更清楚了:)我收到一条警告说“使用“==”比较Double和String类型的值总是会产生错误”@nsbr11添加了模式匹配解决方案请检查谢谢您也提供了模式匹配解决方案!让它更清楚:)