Scala 参数为double时如何返回None?
好的,我是Scala的初学者,我需要在if-else函数中不返回任何值。但我总是会遇到这样的错误: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 ==
: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添加了模式匹配解决方案请检查谢谢您也提供了模式匹配解决方案!让它更清楚:)