Ответы пользователя по тегу Структуры данных
  • Как создать ссылку на метод из массива-свойства структуры в Go?

    @r1000ru Автор вопроса
    Программирую
    Ниже тоже самое на Go, но без карты методов, а хотелось бы как-то красивее:
    package main
    
    import "fmt"
    
    // Test structure
    type Test struct {
    	a       int8
    	b       int8
    	opcodes [2]func() int8
    }
    
    func (t *Test) add() int8 {
    	return t.a + t.b
    }
    
    func (t *Test) sub() int8 {
    	return t.a - t.b
    }
    
    // Init properties
    func (t *Test) Init(a, b int8) {
    	t.a = a
    	t.b = b
    	// Вручную заполняем указатели на методы
    	t.opcodes[0] = t.add
    	t.opcodes[1] = t.sub
    	return
    }
    
    // Call method by ID
    func (t *Test) Call(fnID int8) int8 {
    	fn := t.opcodes[fnID]
    	if fn == nil {
    		panic(`Empty command`)
    	}
    	r := fn()
    	return r
    }
    
    func main() {
    	t := new(Test)
    	t.Init(2, 5)
    	fmt.Println(t.Call(0x00), t.Call(0x01))
    }

    UPD: Убрал switch, добавил массив. Соотвественно вопрос: можно ли сделать так, чтобы при создании экземпляра, автоматом заполнялся массив Test.opcodes указателями на методы
    Ответ написан
    1 комментарий