是什么让 Kotlin 中的字符串 class 能够使用方括号?
What makes the String class in Kotlin to be able to work with square brackets?
在 Kotlin 中你可以这样做:
val s: String = "Hey"
println(s[1])
或者简单地说:
println("Hey"[1])
你将打印 e
.
但是如果您想将此行为扩展到您自己的 classes 怎么办?您需要实现什么接口来完成此语法?
我查看了String
的超类型,只发现了Comparable<String>
和CharSequence
,它们本身都没有任何其他超类型,所以我的探索提前结束了。
例如在 Python 中,通过在 class 中定义一个名为 __getitem__
的方法,您可以赋予 class 的对象使用的能力像这样的方括号语法 a[i]
;我想知道这在 Kotlin 中是如何实现的。
提前致谢。
您可以使用 Kotlin 的运算符重载,特别是 indexed access operators.
的重载
语法 "Hey"[1]
只是 "Hey".get(1)
的别名(如果不在赋值的 left-hand 一侧,它将是 "Hey".set(1, ...)
的别名) .
显然只要有一个方法 get(i: Int)
就足够了。有意思...
在 Kotlin 中你可以这样做:
val s: String = "Hey"
println(s[1])
或者简单地说:
println("Hey"[1])
你将打印 e
.
但是如果您想将此行为扩展到您自己的 classes 怎么办?您需要实现什么接口来完成此语法?
我查看了String
的超类型,只发现了Comparable<String>
和CharSequence
,它们本身都没有任何其他超类型,所以我的探索提前结束了。
例如在 Python 中,通过在 class 中定义一个名为 __getitem__
的方法,您可以赋予 class 的对象使用的能力像这样的方括号语法 a[i]
;我想知道这在 Kotlin 中是如何实现的。
提前致谢。
您可以使用 Kotlin 的运算符重载,特别是 indexed access operators.
的重载语法 "Hey"[1]
只是 "Hey".get(1)
的别名(如果不在赋值的 left-hand 一侧,它将是 "Hey".set(1, ...)
的别名) .
显然只要有一个方法 get(i: Int)
就足够了。有意思...