Domanda

Sto costruendo un interprete / compilatore per un progetto scolastico (bene ora il suo trasformarsi in un progetto hobby) e un istruttore mi ha avvertito di non permettere mutazione del 'questo' legame (lui ha detto che era indecente e ha fatto un enorme molto su di esso), ma non ho mai imparato perché questo è così ... pericoloso o cattivo. Sono molto curioso di sapere il motivo per cui questo è così male. Ho pensato che questo tipo di caratteristica potrebbe essere utile in un modo o nell'altro.

Mi chiedo se chiunque abbia familiarità con i linguaggi di costruzione può dirmi che tipo di problemi mutazione sul 'questo' legame può causare, e se sanno di qualsiasi fresca o trucchi utili che si potrebbe fare se effettivamente è stato permesso.

fare qualsiasi lingue che siete a conoscenza di consentire la mutazione di 'questo'?

Grazie,

È stato utile?

Soluzione

mi viene in mente diversi motivi per cui sarebbe una cattiva idea.

1) 'questo' è un puntatore all'istanza oggetto su cui viene richiamato il metodo chiamata. Permettere modifiche ad esso potrebbe portare a convalide di accesso alla memoria nel caso peggiore.

2) Il chiamante si aspetta che il metodo di lavoro per l'istanza in cui è stato invocato. La modifica 'questo' qualcos'altro produrrebbe risultati imprevisti.

3) Non riesco a pensare a qualcosa che la mutazione di 'questo' permetterebbe che non possono essere raggiunti in un modo familiare più standard.

Altri suggerimenti

Sono sorpreso vostro istruttore ottenuto così het up. E 'solo un cambiamento nella definizione del linguaggio. Non credo di essere in grado di cambiare il significato di this è utile o bene progettazione del linguaggio, ma credo che il tempo che si tiene fede alla semantica di riferimento è un esperimento valido.

Il motivo principale per non permettere this per riferirsi a qualcosa di diverso da quello del ricevitore del metodo attuale è che voi confondere le aspettative di chiunque abbia mai letto o scritto un programma orientato agli oggetti. Questo non è un buon design.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top