55 lines
826 B
V
55 lines
826 B
V
struct Group<T> {
|
|
len int
|
|
val []T
|
|
mut:
|
|
index int
|
|
}
|
|
|
|
fn group_new<T>(val ...T) Group<T> {
|
|
mut arr := []T{cap: val.len}
|
|
for i in val {
|
|
arr << i
|
|
}
|
|
mut g := Group<T>{
|
|
len: val.len
|
|
val: arr
|
|
}
|
|
|
|
return g
|
|
}
|
|
|
|
fn (mut it Group<T>) next() ?T {
|
|
if it.index >= it.len {
|
|
return none
|
|
}
|
|
v := it.val[it.index]
|
|
it.index++
|
|
return v
|
|
}
|
|
|
|
fn test_generics_with_embed_generics() {
|
|
gx1 := group_new<int>(1, 2, 3)
|
|
for x in gx1.val {
|
|
println(x)
|
|
}
|
|
assert gx1.val == [1, 2, 3]
|
|
|
|
gx2 := group_new<f64>(1.1, 2.2, 3.3)
|
|
for x in gx2.val {
|
|
println(x)
|
|
}
|
|
assert gx2.val == [1.1, 2.2, 3.3]
|
|
|
|
gx3 := group_new<bool>(true, true, false)
|
|
for x in gx3.val {
|
|
println(x)
|
|
}
|
|
assert gx3.val == [true, true, false]
|
|
|
|
gx4 := group_new<string>('aa', 'bb', 'cc')
|
|
for x in gx4.val {
|
|
println(x)
|
|
}
|
|
assert gx4.val == ['aa', 'bb', 'cc']
|
|
}
|