mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
76 lines
1.0 KiB
V
76 lines
1.0 KiB
V
struct Base {
|
|
}
|
|
|
|
interface Foo {
|
|
parent Foo2
|
|
thing(mut b Base, value i64) string
|
|
}
|
|
|
|
interface Foo2 {
|
|
thing(mut b Base, value i64) string
|
|
}
|
|
|
|
struct Bar {
|
|
parent Foo2
|
|
}
|
|
|
|
struct Bar2 {}
|
|
|
|
fn (f Bar) thing(mut b Base, value i64) string {
|
|
return 'bar'
|
|
}
|
|
|
|
fn (f Bar2) thing(mut b Base, value i64) string {
|
|
return 'bar2'
|
|
}
|
|
|
|
struct SubBar {
|
|
parent Foo2 = Bar2{}
|
|
}
|
|
|
|
fn (f SubBar) thing(mut b Base, value i64) string {
|
|
return 'subbar'
|
|
}
|
|
|
|
fn test_interface_nested_field() {
|
|
mut foo_group := []Foo2{}
|
|
foo_group << Bar2{}
|
|
foo_group << SubBar{}
|
|
|
|
mut b := Base{}
|
|
mut ret := []string{}
|
|
for foo in foo_group {
|
|
println(foo.thing(mut b, 22))
|
|
ret << foo.thing(mut b, 22)
|
|
}
|
|
assert ret.len == 2
|
|
assert ret[0] == 'bar2'
|
|
assert ret[1] == 'subbar'
|
|
}
|
|
|
|
interface Root {
|
|
v View
|
|
}
|
|
|
|
struct MyRoot {
|
|
v View
|
|
}
|
|
|
|
interface View {
|
|
render() int
|
|
}
|
|
|
|
struct MyView {}
|
|
|
|
fn (m MyView) render() int {
|
|
return 24
|
|
}
|
|
|
|
fn receive_root(r Root) int {
|
|
return r.v.render()
|
|
}
|
|
|
|
fn test_nested_interface_fields() {
|
|
assert receive_root(MyRoot{MyView{}}) == 24
|
|
}
|