Perché non permettere mutazione del questo legame?
-
26-09-2019 - |
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,
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.