Scala变量范围

时间:2016-09-25 15:28:41

标签: scala

我创建了一个返回Date值的简单方法。 在处理方法“convertStrToDate”之前,我想做一个空检查条件。所以,如果它不是null,那么我想处理该方法。 面临的问题是变量returnvar的范围在“If循环”中。所以我不能在if循环之外使用变量“returnvar”,其中我实际上需要作为输出返回到方法。 任何人都可以帮忙解决这个问题。

def convertStrToDate(inputvar: String): Date = {
  if (inputvar != null && inputvar.nonEmpty) {
    val format = new java.text.SimpleDateFormat(inputvar)
    val formattedvar: Date = format.parse(inputvar)
    var returnvar = new java.sql.Date(formattedvar.getTime());
  }
return returnvar
}

1 个答案:

答案 0 :(得分:3)

您可以将Option用于此目的。

如果您的计算成功,请返回Some(value)或返回None

请注意,方法的返回类型更改为Option[Date]

  def convertStrToDate(inputvar: String): Option[Date] = {
      if (inputvar != null && inputvar.nonEmpty) {
        val format = new java.text.SimpleDateFormat(inputvar)
        val formattedvar: Date = format.parse(inputvar)
        var returnvar = new java.sql.Date(formattedvar.getTime())
        Some(returnVar)
      } else None
    }

请注意,return在scala中是可选的

惯用法。

如果inputvar有效,则获取Some(input),然后映射以生成后续值。

def convertStrToDate(inputvar: String): Option[Date] = { 
   Option(inputvar).filter(_.nonEmpty).map { inputStr =>
     val format = new java.text.SimpleDateFormat(inputStr)
     val formattedvar: Date = format.parse(inputStr)
     new java.sql.Date(formattedvar.getTime())      
   }
}