scala Some(variable)作为方法Option参数的默认值无法编译

使用Some(salt),Option(salt)作为方法参数默认值无法通过编译

case 1 使用Some(salt)作为参数默认值无法通过编译
object Digest {
  import utils.Hex._

  val salt = Configuration.load(Environment.simple()).get[String]("hash.salt")

  def digest(s: String, salt: Option[String] = Some(salt)): String = {
    ...
  }
}
[info] Compiling 1 Scala source to /home/xiao/weibos_service/target/scala-2.12/classes ...                                                        
[error] /home/xiao/weibos_service/app/utils/encrypt/Digest.scala:12:55: type mismatch;
[error]  found   : Option[String]                                                                   
[error]  required: String                                                                             
[error]   def digest(s: String, salt: Option[String] = Option(salt)): String = {                       
[error]                                                       ^                                       
[error] one error found                                                                                
[error] (compile:compileIncremental) Compilation failed                                                
[error] Total time: 1 s, completed 2018-3-14 17:41:30                  
case 2 使用另一个新的成员saltOpt=Some(salt)作为参数默认值就能通过编译了
object Digest {
  import utils.Hex._

  val salt = Configuration.load(Environment.simple()).get[String]("hash.salt")
  private val someSalt = Option(salt)

  def digest(s: String, salt: Option[String] = someSalt): String = {
    ...
  }
}

???

阅读 2.5k
1 个回答
val salt = Configuration.load(Environment.simple()).get[String]("hash.salt")
def digest(s: String, salt: Option[String] = Some(salt)): String = {

digest里面的salt和外面定义的salt重复了,改个名字就好了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进