ds={ "init":func(end){@end=end; @current=0; @prev=@current}, "current":func(){prev}, "next":func(){ (current <= end) ? [true] {@current=current+1; @prev=current} :: {nil} }, "reset":func(){@current=0; @prev=@current} } // Example //; //it=$(ds,3); //it++; //it."reset" //it++; //it++; //add(it)