Skip to content

Instantly share code, notes, and snippets.

@ezura
Created June 19, 2017 13:36
Show Gist options
  • Select an option

  • Save ezura/ddb876f11cba2749467b5011744b5d5b to your computer and use it in GitHub Desktop.

Select an option

Save ezura/ddb876f11cba2749467b5011744b5d5b to your computer and use it in GitHub Desktop.
class A : Iterable<String> {
override operator fun iterator(): Iterator<String> = MyIterator()
}
class MyIterator: Iterator<String> {
override operator fun hasNext(): Boolean = Math.random() < 0.5
override operator fun next(): String = "a"
}
// A().forEach({ print(it)})
@ezura
Copy link
Copy Markdown
Author

ezura commented Jun 19, 2017

for in だけなら、Iterable、Iterator への準拠を宣言しなくてもできる

class A {
    operator fun iterator() = MyIterator()
}

class MyIterator {
    operator fun hasNext(): Boolean = Math.random() < 0.5
    operator fun next(): String = "a"
}

// A().forEach({ print(it)}) ❌
// for (item in A()) { print(item) } ⭕️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment