DEV Community

Discussion on: Daily Challenge #204 - Partial Keys

Collapse
 
avalander profile image
Avalander • Edited

Scala

import scala.language.dynamics

object PartialKeys extends App {
  case class Wrapper[T](obj: T) extends Dynamic {
    private val fields = obj.getClass.getDeclaredFields.toList
    fields foreach (_.setAccessible(true))

    // `selectDynamic` expands field access `object.field` into `object.selectDynamic("field")`
    def selectDynamic (name: String): Option[Any] = {
      fields find (_.getName.startsWith(name)) map (_.get(obj))
    }
  }

  object obj {
    val abcd = 1
  }

  val o = Wrapper(obj)

  println(o.abcd) // Some(1)
  println(o.abc)  // Some(1)
  println(o.ab)   // Some(1)
  println(o.a)    // Some(1)
  println(o.b)    // None
}