Kotlin-如何为成员字段建立索引访问器?

时间:2018-06-24 15:50:38

标签: kotlin

我希望能够使用[x,y]表示法访问对象的成员字段之一,例如board.tiles [0,0] =42。这可能吗?

这是我要做什么的想法。...

无法编译

class Tile(var value: Int = 0){

}

class Board() {
    var _tiles = Array<Tile>(100) {Tile()} //Represents a 10x10 playing board

    var tiles
    get(x: Int, y: Int) {return _tiles[y * 10 + x]}
    set(x:Int, y: Int, value: Tile) {_tiles[y * 10 + x] = value}

}

fun main(args: Array<String>) {
    val board = Board()
    board.tiles[0,0].value = 42
}

3 个答案:

答案 0 :(得分:1)

要获取该语法,您需要使indexing operators重载,例如:

WP_Query()

这将为您提供以下语法:

class Board() {

    private var _tiles = Array<Tile>(100) { Tile() } //Represents a 10x10 playing board

    operator fun get(x: Int, y: Int): Tile {
        return _tiles[y * 10 + x]
    }

    operator fun set(x: Int, y: Int, value: Tile) {
        _tiles[y * 10 + x] = value
    }

}

如果您特别想做val board = Board() board[0, 0].value = 42 println(board[0, 0]) ,则必须在board.tiles[0, 0]内嵌套这些运算符重载的属性。

答案 1 :(得分:1)

Kotlin定义了一些约定,可让您按照建议进行操作。看看Indexed access operators

Board

答案 2 :(得分:0)

实际上,您可以拥有这样的东西:

<div>
  <span class="cercle-logo"><i class="fa fa-chart-pie fa-2x"></i></span>
</div>