In Go, perché append () non è implementato come metodo, ma come funzione?

1

In Python, le liste offrono un metodo append() che può essere chiamato usando la sintassi del metodo standard di Python; ad esempio:

>>> my_list = []
>>> my_list.append('a', 'b', 'c')
>>> my_list
['a', 'b', 'c']

Questa sintassi è intuitiva per me e questo modello è comune nelle implementazioni di elenchi in molte lingue OO.

Ultimamente, ho lavorato più a stretto contatto con Go, e sto cercando di capire meglio alcune delle scelte progettuali fatte nella lingua. In particolare, perché append() è definito come una funzione regolare (prendendo la slice da aggiungere al primo argomento e restituendo la slice appena costruita), piuttosto che un metodo sul tipo slice?

Sono consapevole che Go non ha un costrutto self / this , ma la libreria standard prende alcune libertà con il modo in cui le sue funzioni sono definite rispetto al resto della lingua; ad esempio, make() prende un tipo come primo argomento e, per quanto ne so, non è possibile quando si definisce una nuova funzione.

È solo un cenno al modello di C di passare riferimenti a variabili, piuttosto che restituire nuove variabili?

    
posta Jules 18.02.2016 - 05:32
fonte

1 risposta

3

Le Domande frequenti su Go hanno una domanda correlata:

Why is len a function and not a method?

We debated this issue but decided implementing len and friends as functions was fine in practice and didn't complicate questions about the interface (in the Go type sense) of basic types.

len sembrerebbe essere nella stessa barca di append . Se fossero metodi, dovrebbero influire sul fatto che i tipi integrati si adattino a varie interfacce. Ciò ha reso l'aggiunta di questi metodi un po 'più complicati, solo per averli incorporati speciali per loro. Hanno deciso che non importava in pratica, quindi la complessità extra non ne valeva la pena.

    
risposta data 18.02.2016 - 07:13
fonte

Leggi altre domande sui tag