55 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			V
		
	
	
| module main
 | |
| 
 | |
| interface Speaker {
 | |
| 	say() string
 | |
| }
 | |
| 
 | |
| fn test_todo() {}
 | |
| 
 | |
| /*
 | |
| // QTODO
 | |
| struct ChatRoom {
 | |
| mut:
 | |
| 	talkers map[string]Speaker
 | |
| }
 | |
| 
 | |
| fn new_room() &ChatRoom {
 | |
| 	return &ChatRoom{
 | |
| 		talkers: map[string]Speaker
 | |
| 	}
 | |
| }
 | |
| 
 | |
| fn (mut r ChatRoom) add(name string, s Speaker) {
 | |
| 	r.talkers[name] = s
 | |
| }
 | |
| 
 | |
| fn test_using_a_map_of_speaker_interfaces() {
 | |
| 	mut room := new_room()
 | |
| 	room.add('my cat', Cat{name: 'Tigga'} )
 | |
| 	room.add('my dog', Dog{name: 'Pirin'} )
 | |
| 	room.add('stray dog', Dog{name: 'Anoni'} )
 | |
| 	room.add('me', Human{name: 'Bilbo'} )
 | |
| 	room.add('she', Human{name: 'Maria'} )
 | |
| 	mut text := ''
 | |
| 	for name, subject in room.talkers {
 | |
| 		line := '${name:12s}: ${subject.say()}'
 | |
| 		println(line)
 | |
| 		text += line
 | |
| 	}
 | |
| 	assert text.contains(' meows ')
 | |
| 	assert text.contains(' barks ')
 | |
| 	assert text.contains(' says ')
 | |
| }
 | |
| 
 | |
| //
 | |
| 
 | |
| struct Cat { name string }
 | |
| fn (c &Cat) say() string { return '${c.name} meows "MEOW!"' }
 | |
| 
 | |
| struct Dog { name string }
 | |
| fn (d &Dog) say() string { return '${d.name} barks "Bau Bau!"' }
 | |
| 
 | |
| struct Human { name string }
 | |
| fn (h &Human) say() string { return '${h.name} says "Hello"' }
 | |
| */
 |