Scala,建议方法签名

Scala, advise on method signature

我正在玩 scala-js 并尝试使用 MVP 模式实现一个简单的主从细节。 最初我有一个 ListView 和两个修改器: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

我的第一个想法是 return 一个特殊的 class 来自方法 items(row)= 方法来改变视图。但是后来我无法获得给定行的项目,这个 class 应该由视图的所有实现来实现。

在特定行更改项目的 Scala 样式可以是什么?

您可以使用具有 applyupdate 方法的内部 object items 来实现:

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