Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Just some of my libraries, nothing important here.
- #Include ../libs/useful/logger.v2.ahk
- #Include ../libs/useful/option.v2.ahk
- #Include ../libs/useful/result.v2.ahk
- #SingleInstance Force
- Class Iter {
- __New(data) {
- this.data := data
- this.i := 1
- }
- next() {
- if this.data.Length < this.i {
- return Option.none()
- }
- this.i++
- return Option.of(this.data[this.i - 1])
- }
- map(mapper) {
- return IterMap(this, mapper)
- }
- filter(predicate) {
- return IterFilter(this, predicate)
- }
- }
- class IterMap extends Iter {
- __New(itr, mapper) {
- this.itr := itr
- this.mapper := mapper
- }
- next() {
- item := this.itr.next()
- if item.isNone() {
- return item
- }
- return Option.of(this.mapper.Call(item.unwrap()))
- }
- }
- class IterFilter extends Iter {
- __New(itr, predicate) {
- this.itr := itr
- this.predicate := predicate
- }
- next() {
- item := this.itr.next()
- if item.isNone() {
- return item
- }
- res := this.predicate.Call(item.unwrap())
- if !res {
- return Option.none()
- }
- return Option.of(res)
- }
- }
- main() {
- lg := Logger(, true)
- f := Iter([1, 2, 3, 4, 5]).map(x => Round(x * 33 / 1.534)) ; .filter(x => Mod(x, 2) == 0)
- while (item := f.next()).isSome() {
- lg.log(item)
- }
- }
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement