En Go, si vous définissez un nouveau type par exemple :
type MyInt int
Vous ne pouvez alors pas passer un MyInt
à une fonction attendue en tant qu'int, ou vice versa :
func test(i MyInt) {
//faire quelque chose avec i
}
func main() {
anInt := 0
test(anInt) //ne fonctionne pas, int n'est pas de type MyInt
}
D'accord. Mais pourquoi est-ce que la même chose ne s'applique pas aux fonctions? par exemple :
type MyFunc func(i int)
func (m MyFunc) Run(i int) {
m(i)
}
func run(f MyFunc, i int) {
f.Run(i)
}
func main() {
var newfunc func(int) //déclaration explicite
newfunc = func(i int) {
fmt.Println(i)
}
run(newfunc, 10) //fonctionne très bien, même si les types semblent différer
}
Je ne me plains pas car cela m'évite de devoir caster explicitement newfunc
en type MyFunc
, comme je devrais le faire dans le premier exemple; cela semble simplement incohérent. Je suis sûr qu'il y a une bonne raison à cela; quelqu'un pourrait-il m'éclairer?
La raison pour laquelle je demande est principalement parce que j'aimerais raccourcir certains de mes types de fonctions plutôt longs de cette manière, mais je veux être sûr que c'est prévu et acceptable de le faire :)