mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
70 lines
829 B
V
70 lines
829 B
V
fn ret(s string) string {
|
|
return s
|
|
}
|
|
|
|
fn raise() ?string {
|
|
return none
|
|
}
|
|
|
|
fn xx() {
|
|
s := ret(raise() or { return })
|
|
println(s)
|
|
}
|
|
|
|
fn test_nested_or() {
|
|
xx()
|
|
}
|
|
|
|
fn xx_prop() ?string {
|
|
s := ret(raise() ?)
|
|
return s
|
|
}
|
|
|
|
fn test_nested_propagation() {
|
|
a := xx_prop() or { 'propagated' }
|
|
assert a == 'propagated'
|
|
}
|
|
|
|
struct St {
|
|
mut:
|
|
z f64
|
|
}
|
|
|
|
fn (mut s St) raise() ?f64 {
|
|
return error('some error')
|
|
}
|
|
|
|
fn retf(f f64) f64 {
|
|
return f
|
|
}
|
|
|
|
fn (mut s St) aa() {
|
|
f := retf(s.raise() or { return })
|
|
s.z = 7.5
|
|
println(f)
|
|
}
|
|
|
|
fn test_nested_or_method_call() {
|
|
mut x := St{
|
|
z: 2.25
|
|
}
|
|
x.aa()
|
|
assert x.z == 2.25
|
|
}
|
|
|
|
fn (mut s St) aa_propagate() ? {
|
|
f := retf(s.raise() ?)
|
|
s.z = 7.5
|
|
println(f)
|
|
}
|
|
|
|
fn test_nested_propagation_method() {
|
|
mut x := St{
|
|
z: 2.25
|
|
}
|
|
x.aa_propagate() or {
|
|
x.z = 13.0625
|
|
}
|
|
assert x.z == 13.0625
|
|
}
|