2010-06-10 9 views
0

Je construis un interprète/compilateur pour un projet d'école (bien maintenant, il devient un projet de passe-temps) et un instructeur m'a averti de ne pas permettre la mutation de la liaison 'this' (il a dit qu'il était grossier à ce sujet) mais je n'ai jamais appris pourquoi c'est si ... dangereux ou mauvais. Je suis très curieux de savoir pourquoi c'est si mauvais. J'ai pensé que ce genre de fonctionnalité pourrait être utile d'une manière ou d'une autre. Je me demande si quelqu'un connaissant les langues de construction peut me dire quel genre de problèmes la mutation de la 'ceci' peut causer, et s'ils connaissent des trucs cool ou utiles que l'on pourrait faire si c'était possible .Pourquoi ne pas permettre la mutation de cette liaison?

Est-ce que les langues que vous connaissez permettent la mutation de 'ceci'?

Merci,

+0

La discussion serait également excellente. :) – sholsapp

Répondre

2

Je peux penser à plusieurs raisons pour lesquelles il serait une mauvaise idée.

1) 'this' est un pointeur vers l'instance d'objet sur laquelle l'appel de méthode est appelé. Permettre des modifications pourrait conduire à des validations d'accès mémoire dans le pire des cas.

2) L'appelant s'attend à ce que la méthode fonctionne sur l'instance sur laquelle elle a été invoquée. Changer «ceci» en quelque chose d'autre produirait des résultats inattendus.

3) Je ne peux pas penser à quoi que ce soit que la mutation de 'ceci' permettrait qui ne peut pas être réalisée d'une manière plus standard et familière.

2

Je suis surpris que votre instructeur soit devenu si hétéro. C'est juste un changement dans la définition de la langue. Je ne pense pas être en mesure de changer la signification de this est utile ou bonne la conception du langage, mais je pense que tant que vous respectez la sémantique de référence c'est une expérience valide. La principale raison de ne pas autoriser this à faire référence à autre chose que le récepteur de la méthode actuelle est que vous confondrez les attentes de toute personne qui a déjà lu ou écrit un programme orienté objet. Ce n'est pas un bon design.