Почему бы не допустить мутацию этого связывания? - PullRequest
0 голосов
/ 10 июня 2010

Я создаю интерпретатор / компилятор для школьного проекта (ну, теперь он превращается в хобби-проект), и инструктор предупредил меня, чтобы я не допускал мутации привязки «this» (он сказал, что это было грубым и сделал огромныйиметь дело с этим) но я так и не узнал, почему это так ... опасно или плохо.Мне очень любопытно, почему это так плохо.Я подумал, что эта функция может быть так или иначе полезна.

Мне интересно, может ли кто-нибудь, знакомый с языками сборки, сказать мне, какие проблемы может вызывать мутация в привязке 'this', и еслиони знают о любых крутых или полезных уловках, которые можно было бы сделать, если бы это было действительно разрешено

Допускают ли какие-либо языки, о которых вы знаете, мутацию "this"?

Спасибо,

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

Я удивлен, что твой инструктор так взволнован. Это просто изменение в определении языка. Я не думаю, что возможность изменить значение this является полезным или хорошим языковым дизайном, но я думаю, что если вы придерживаетесь семантики ссылок, это правильный эксперимент.

Основная причина, по которой this не может ссылаться на что-либо, кроме получателя текущего метода, заключается в том, что вы будете смешивать ожидания любого, кто когда-либо читал или писал объектно-ориентированную программу. Это не очень хороший дизайн.

2 голосов
/ 10 июня 2010

Я могу придумать несколько причин, почему это было бы плохой идеей.

1) 'this' - указатель на экземпляр объекта, для которого вызывается вызов метода. Разрешение изменений может привести к проверке доступа к памяти в худшем случае.

2) Вызывающий ожидает, что метод будет работать на экземпляре, на котором он был вызван. Изменение 'this' на что-то другое приведет к неожиданным результатам.

3) Я не могу думать ни о чем, что мутация «this» позволила бы достичь этого более стандартным, привычным способом.

...