Skip to content

Instantly share code, notes, and snippets.

@Centaur
Created November 16, 2015 05:42
Show Gist options
  • Save Centaur/50c26b983aa78fc78f71 to your computer and use it in GitHub Desktop.
Save Centaur/50c26b983aa78fc78f71 to your computer and use it in GitHub Desktop.
Idiomatic Scala
object Yadsun {
trait SubColumnStatus
case object Disabled extends SubColumnStatus
case object Enabled extends SubColumnStatus
type SubColumns = Map[String, SubColumnStatus]
case class SysColumn(columnId: Int, columnText: String, subColumns: SubColumns) {
def addSubColumn(text: String) = commonOp(text)(_ => subColumns, txt => subColumns.updated(txt, Enabled))
def removeSubColumn(text: String) = commonOp(text)(txt => subColumns - txt, _ => subColumns)
def disableSubColumn(text: String) = commonOp(text)(txt => subColumns.updated(txt, Disabled), _ => subColumns)
def enableSubColumn(text: String) = commonOp(text)(txt => subColumns.updated(txt, Enabled), _ => subColumns)
private def commonOp(text: String)(ifContains: String => SubColumns, notContains: String => SubColumns) = {
val newSubColumns = if (subColumns.contains(text)) ifContains(text) else notContains(text)
this.copy(subColumns = newSubColumns)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment