Scala: Setting a default value
Join the DZone community and get the full member experience.
Join For FreeWe wanted to try and generate a build label to use for the name of the artifacts archive that gets generated each time we run the build but wanted to default it to a hard coded value if the system property representing the build label wasn’t available.
In Ruby we would be able to do something like this:
buildLabel = ENV["GO_PIPELINE_LABEL"] || "LOCAL"
There isn’t a function in Scala that does that so we initially ended up with this:
def buildLabel() = [{
System.getenv("GO_PIPELINE_LABEL") match {
case null => "LOCAL"
case label => label
}
}
My colleague Mushtaq suggested passing the initial value into an Option like so…
def buildLabel() = {
Option(System.getenv("GO_PIPELINE_LABEL")).getOrElse("LOCAL")
}
…which I think is pretty neat!
I tried to see what the definition of an operator to do it the Ruby way would look like and ended up with the following:
class RichAny[A](value:A ) {
def || (default:A ) = { Option(value).getOrElse(default) }
}
implicit def any2RichAny[A <: AnyRef](x: A) = new RichAny(x)
Which we can use like so:
def buildLabel() = {
System.getenv("GO_PIPELINE_LABEL") || "LABEL"
}
I imagine that’s probably not the idiomatic Scala way to do it so I’d be curious to know what is.
From http://www.markhneedham.com/blog/2011/06/12/scala-setting-a-default-value/
Opinions expressed by DZone contributors are their own.
Comments