scala中可变变量的处理
ScalaStyle不允许可变变量。示例代码:scala中可变变量的处理,scala,Scala,ScalaStyle不允许可变变量。示例代码: object Configuration { var auroaDbConfig: AuroraConnectionParameter = null def getConfigration() = { val rootConfig: Config = ConfigFactory.load() //for aurora configuration auroaDbConfig = rootConfig .a
object Configuration {
var auroaDbConfig: AuroraConnectionParameter = null
def getConfigration() = {
val rootConfig: Config = ConfigFactory.load()
//for aurora configuration
auroaDbConfig = rootConfig
.as[AuroraConnectionParameter]("mdpApp.aurora")
//for spark configuration
val sparkConfig: SparkConnectionParameter = rootConfig
.as[SparkConnectionParameter]("mdpApp.spark")
//for cassandra configuration
val cassandraDbConfig: CassandraConnectionParameter = rootConfig
.as[CassandraConnectionParameter]("mdpApp.cassandra")
//for s3 configuration
val s3Config: S3ConnectionParameter = rootConfig
.as[S3ConnectionParameter]("mdpApp.s3")
}
}
用例:只调用一次ConfigFactory.load()
因此,将其放入一个函数中,该函数将在代码中调用一次&其他变量将根据代码中的要求进行调用
def getConfigration() : AuroraConnectionParameter = {
val result = rootConfig
.as[AuroraConnectionParameter]("mdpApp.aurora")
// snip
result
}
val auroaDbConfig = getConfiguration()
如何重构代码,以便在函数中初始化变量,并在代码中需要的时间和地点调用变量
def getConfigration() : AuroraConnectionParameter = {
val result = rootConfig
.as[AuroraConnectionParameter]("mdpApp.aurora")
// snip
result
}
val auroaDbConfig = getConfiguration()
如果我正确理解你的问题,我相信我会按照你的要求去做。当然,您也可以将rootConfig.as[AuroraConnectionParameter]…
作为函数中的最后一条语句执行,它的行为与捕获变量并返回变量相同。符合您的风格和其他约束条件的
如果我正确理解你的问题,我相信我会按照你的要求去做。当然,您也可以将
rootConfig.as[AuroraConnectionParameter]…
作为函数中的最后一条语句执行,它的行为与捕获变量并返回变量相同。无论哪一个符合您的风格和其他限制条件。关键字lazy
正适合这种情况。我们只想加载一次,但只在需要时加载
在本例中,不使用关键字lazy
也可以
object Configuration {
lazy val rootConfig: Config = ConfigFactory.load()
lazy val auroaDbConfig: AuroraConnectionParameter = rootConfig
.as[AuroraConnectionParameter]("mdpApp.aurora")
lazy val sparkConfig: SparkConnectionParameter = rootConfig
.as[SparkConnectionParameter]("mdpApp.spark")
//for cassandra configuration
lazy val cassandraDbConfig: CassandraConnectionParameter = rootConfig
.as[CassandraConnectionParameter]("mdpApp.cassandra")
//for s3 configuration
lazy val s3Config: S3ConnectionParameter = rootConfig
.as[S3ConnectionParameter]("mdpApp.s3")
}
关键词
lazy
正适合这种情况。我们只想加载一次,但只在需要时加载
在本例中,不使用关键字lazy
也可以
object Configuration {
lazy val rootConfig: Config = ConfigFactory.load()
lazy val auroaDbConfig: AuroraConnectionParameter = rootConfig
.as[AuroraConnectionParameter]("mdpApp.aurora")
lazy val sparkConfig: SparkConnectionParameter = rootConfig
.as[SparkConnectionParameter]("mdpApp.spark")
//for cassandra configuration
lazy val cassandraDbConfig: CassandraConnectionParameter = rootConfig
.as[CassandraConnectionParameter]("mdpApp.cassandra")
//for s3 configuration
lazy val s3Config: S3ConnectionParameter = rootConfig
.as[S3ConnectionParameter]("mdpApp.s3")
}
但这不仅仅是一个变量,我有4个相似的变量。我必须确保rootconfig只声明一次。但这不仅仅是一个变量,我有4个相似的变量。我必须确保rootconfig只声明一次