Я пытаюсь написать функцию, которая берет любую другую функцию и оборачивает ее вокруг новой функции. Это то, что я пробовал до сих пор:
package main import ( "fmt" ) func protect (unprotected func (...interface{})) (func (...interface{})) { return func (args ...interface{}) { fmt.Println ("protected"); unprotected (args...); }; } func main () { a := func () { fmt.Println ("unprotected"); }; b := protect (a); b (); }
Когда я компилирую это я получаю сообщение об ошибке:
cannot use a (type func()) as type func(...interface { }) in function argument
Почему функция без аргументов несовместима с функцией с переменным числом аргументов? Что я могу сделать, чтобы сделать их совместимыми?
Обновление: Защищенная функция должна быть совместима с оригиналом:
func take_func_int_int (f func (x int) (y int)) (int) { return f (1) } func main () { a := func (x int) (y int) { return 2 * x } b := protect (a) take_func_int_int (a) take_func_int_int (b) }