82 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			V
		
	
	
| struct St {
 | |
| mut:
 | |
| 	a int
 | |
| }
 | |
| 
 | |
| struct Qr {
 | |
| mut:
 | |
| 	a int
 | |
| }
 | |
| 
 | |
| fn (mut r Qr) s_mut(mut s St) {
 | |
| 	r.a = 5
 | |
| 	s.a = 7
 | |
| }
 | |
| 
 | |
| fn (r Qr) s_val(s St) int {
 | |
| 	return r.a * s.a
 | |
| }
 | |
| 
 | |
| fn m_mut(mut a map[string]f64) {
 | |
| 	a['yxcv'] = -2.25
 | |
| }
 | |
| 
 | |
| fn m_val(a map[string]f64) f64 {
 | |
| 	x := a['yxcv']
 | |
| 	return x
 | |
| }
 | |
| 
 | |
| fn a_mut(mut a []int) {
 | |
| 	a[2] = 42
 | |
| }
 | |
| 
 | |
| fn a_val(a []int) int {
 | |
| 	return a[1]
 | |
| }
 | |
| 
 | |
| fn test_shared_as_value() {
 | |
| 	shared s := St{ a: 5 }
 | |
| 	shared a := [3, 4, 6, 13, -23]
 | |
| 	shared m := {'qw': 12.75, 'yxcv': -3.125, 'poiu': 88.0625}
 | |
| 	shared r := Qr{ a: 7 }
 | |
| 	lock s {
 | |
| 		u := r.s_val(s)
 | |
| 		println(u)
 | |
| 	}
 | |
| 	lock r {
 | |
| 		v := r.s_val(s)
 | |
| 		println(v)
 | |
| 	}
 | |
| 	w := m_val(m)
 | |
| 	x := a_val(a)
 | |
| 	println('$w $x')
 | |
| }
 | |
| 
 | |
| fn test_shared_as_mut() {
 | |
| 	shared s := St{ a: 5 }
 | |
| 	shared a := [3, 4, 6, 13, -23]
 | |
| 	shared m := {'qw': 12.75, 'yxcv': -3.125, 'poiu': 88.0625}
 | |
| 	shared r := Qr{ a: 7 }
 | |
| 	lock s {
 | |
| 		r.s_mut(mut s)
 | |
| 	}
 | |
| 	lock r {
 | |
| 		r.s_mut(mut s)
 | |
| 	}
 | |
| 	m_mut(mut m)
 | |
| 	a_mut(mut a)
 | |
| }
 | |
| 
 | |
| struct Ab {
 | |
| 	s shared St
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
| 	shared y := St{ a: 5 }
 | |
| 	println(y)
 | |
| 	println('$y')
 | |
| 	a := Ab{ s: St{ a: 3 } }
 | |
| 	println(a.s)
 | |
| 	println('$a.s')
 | |
| }
 |