Scala,建议方法签名

时间:2015-07-24 08:40:31

标签: scala scala.js

我正在玩 scala-js 并尝试使用MVP模式实现简单的主要细节。 最初我有一个ListView有两个mutator:setEmpty(empty:Boolean)setItemAt(item:Item, row:Int)

但我想通过重载分配运算符来替换它们

trait ListView {

  def empty:Boolean
  def empty_=(empty: Boolean)

  def item(row: Int):Item
  // mutator for item at row     
}

它适用于empty,但对于item,我希望有一个方法调用,如:

val view:ListView = ..
view.items(row) = item

我的第一个想法是从具有items(row)方法的方法=返回一个特殊类来更改视图。但是后来我无法在给定的行中获取该项,并且该类应该由视图的所有实现来实现。

Scala 样式可以更改特定行的项目吗?

1 个答案:

答案 0 :(得分:4)

您可以使用具有object itemsapply方法的内部update来执行此操作:

trait ListView {
  ...
  object items {
    def apply(row: Int): Item = ???
    def update(row: Int, item: Item): Unit = ???
  }
}

现在你可以做到:

val listView: ListView = ???
val item = listView.items(0)
listView.items(0) = someItem