https://kotlinlang.org logo
Title
n

natpryce

02/07/2023, 10:40 PM
The expression
(1 .. 10 step 2)
returns an IntProgression,
('a' .. 'z' step 2)
returns a CharProgression, and there are equivalents for many built in types, but not for user-defined types. Could the stdlib define the
step
function for
ClosedRange<T>
, to return a new stdlib type
Progression<T>
.?
s

Sam

02/08/2023, 8:01 AM
Not every comparable can be added and subtracted, so it only really works for numeric types. What would step mean for e.g. a
String
? Unless it could take a lambda, like
generateSequence
...
infix fun ClosedRange<String>.step(step: (String) -> String): Iterable<String> =
    generateSequence(start, step).takeWhile { it in this }.asIterable()

for (s in "foo".."foooooo" step { it + "o" }) println(s)
I kind of like it! 😄
not entirely sure how sensible it is, though…
n

natpryce

02/08/2023, 12:54 PM
I kind of like it too!
But yeah, I get your point. There is no way to express “addable” in Kotlin.
But a step function is a good compromise