Local/inner types
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
virtual class Builder<E, R> {
|
||||
[operator] fun plusAssign(item : E)
|
||||
fun result() : R
|
||||
}
|
||||
|
||||
virtual class Buildable {
|
||||
fun newBuilder<E, R>() : Builder<E, R>
|
||||
}
|
||||
|
||||
class List<T> {
|
||||
|
||||
class object Buildable {
|
||||
override fun newBuilder<E, R>() : Builder<E, R>
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension Map<E> for T
|
||||
where
|
||||
T : Iterable<E>,
|
||||
class object T : Buildable<E, T> {
|
||||
|
||||
fun map<R>(f : {(E) : R}) : T<R> = {
|
||||
val builder = T.newBuilder()
|
||||
for (e in this) {
|
||||
builder += f(e)
|
||||
}
|
||||
builder.result()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user