Scala中的索引属性?

时间:2015-01-14 16:11:30

标签: scala scala-2.11

基本属性有_ =语法。这大致是Java与getter和setter的等价物。但是,还有类似于Java索引属性的东西吗?

我想让人们的生活更轻松,允许这样的事情:

环境:

titles.title(1) = "title of 1"  // returns nothing

获得:

titles.title(1) // returns "title of 1"

Scala有可能吗?

更新:示例代码

class Foo {
  val title = new IndexedProperty[Int, String]
}

class IndexedProperty[A, B] {
  var map = Map.empty[A, B]

  def apply(key: A): Option[B] = map.get(key)

  def update(key: A, value: Option[B]): Unit = {
    value match {
      case Some(v) => map += (key -> v)
      case None if map.contains(key) => map -= key
      case _ =>
    }
  }
}

val foo = new Foo
foo.title(1) = Some("Title of 1")
println(a.title(1)) // yields Some("Title of 1")
println(a.title(2)) // yields None

1 个答案:

答案 0 :(得分:2)

这样的事情可能是:

object titles {
  object title {
    def apply(i: Int) = "apply " + i
    def update(i:Int, s: String) = "update " + i + " = " + s
  }
}

对于类和对象的工作方式相同。