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 样式可以是什么?
您可以使用具有 apply
和 update
方法的内部 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
我正在玩 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 样式可以是什么?
您可以使用具有 apply
和 update
方法的内部 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