mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
60 lines
1.5 KiB
V
60 lines
1.5 KiB
V
fn print_field_values<T>(s T) {
|
|
mut value_list := []string{}
|
|
mut value_type_list := []string{}
|
|
mut var_value_list := []string{}
|
|
mut var_intp_value_list := []string{}
|
|
|
|
$for field in T.fields {
|
|
println(s.$(field.name))
|
|
value_list << s.$(field.name).str()
|
|
|
|
println(typeof(s.$(field.name)).name)
|
|
value_type_list << typeof(s.$(field.name)).name
|
|
|
|
val := s.$(field.name)
|
|
println(val)
|
|
var_value_list << val.str()
|
|
var_intp_value_list << 'field value: $val'
|
|
}
|
|
assert value_list.len == 4
|
|
assert value_list[0] == 'Simon'
|
|
assert value_list[1] == 'simon1234'
|
|
assert value_list[2] == 'simon@gmail.com'
|
|
assert value_list[3] == '15'
|
|
|
|
assert value_type_list.len == 4
|
|
assert value_type_list[0] == 'string'
|
|
assert value_type_list[1] == 'string'
|
|
assert value_type_list[2] == 'string'
|
|
assert value_type_list[3] == 'int'
|
|
|
|
assert var_value_list.len == 4
|
|
assert var_value_list[0] == 'Simon'
|
|
assert var_value_list[1] == 'simon1234'
|
|
assert var_value_list[2] == 'simon@gmail.com'
|
|
assert var_value_list[3] == '15'
|
|
|
|
assert var_intp_value_list.len == 4
|
|
assert var_intp_value_list[0] == 'field value: Simon'
|
|
assert var_intp_value_list[1] == 'field value: simon1234'
|
|
assert var_intp_value_list[2] == 'field value: simon@gmail.com'
|
|
assert var_intp_value_list[3] == 'field value: 15'
|
|
}
|
|
|
|
struct Foo {
|
|
name string
|
|
password string [this_will_not_change_the_order]
|
|
email string
|
|
age int
|
|
}
|
|
|
|
fn test_comptime_for_in_field_selector() {
|
|
bar := Foo{
|
|
name: 'Simon'
|
|
password: 'simon1234'
|
|
email: 'simon@gmail.com'
|
|
age: 15
|
|
}
|
|
print_field_values<Foo>(bar)
|
|
}
|