在我的游戏中我有两个玩家,所以我定义了一个对的类型,应该表明我有两个相同类型的东西,.first
属于玩家一,.second
属于玩家二:
typealias PlayerPair<A> = Pair<A, A>
我也定义了这个枚举类
enum class PlayerNumber {
One,
Two
}
现在我想添加一个运算符(作为扩展函数)来访问这样的元素
myPair[Player.One]
这是我的方法,但它不起作用
operator fun PlayerPair.get(i: PlayerNumber) = when (i) {
PlayerNumber.One -> PlayerPair.first
PlayerNumber.Two -> PlayerPair.sexond
}
添加else分支会删除一个错误,但我不明白为什么有必要。
另一个错误是'期望类型为PlayerPair = Pair的一个类型参数'。
但我无法弄清楚在这种情况下这意味着什么。
你可以创建一个通用的get
函数,你只需要指定一个类型参数,并且你正在扩展一个PlayerPair<T>
:
operator fun <T> PlayerPair<T>.get(i: PlayerNumber): T = when (i) {
PlayerNumber.One -> this.first
PlayerNumber.Two -> this.second
}
在运算符内部,您可以将PlayerPair<T>
的实例称为this
,您也可以隐式使用它:
operator fun <T> PlayerPair<T>.get(i: PlayerNumber): T = when (i) {
PlayerNumber.One -> first
PlayerNumber.Two -> second
}