代码之家  ›  专栏  ›  技术社区  ›  sholsapp

为什么不允许这种结合的突变?

  •  0
  • sholsapp  · 技术社区  · 15 年前

    我正在为一个学校项目(现在它变成了一个爱好项目)建立一个翻译/编译程序,一个老师警告我不要允许“这个”绑定的突变(他说这很恶心,做了很多事情),但我从来没有明白为什么会这样……危险或不好。我很好奇为什么这么糟糕。我认为这种功能在某些方面是有用的。

    我想知道,如果有人熟悉建筑语言,是否可以告诉我“这个”绑定上的突变会导致什么样的问题,以及他们是否知道如果真的允许,人们可以做的任何酷的或有用的技巧。

    你所知道的任何语言都允许“this”的变异吗?

    谢谢,

    2 回复  |  直到 15 年前
        1
  •  2
  •   bbudge    15 年前

    我可以想到几个原因,为什么这是一个坏主意。

    1)“this”是指向调用方法调用的对象实例的指针。在最坏的情况下,允许对其进行更改可能会导致内存访问验证。

    2)调用方希望方法在调用它的实例上工作。将“this”更改为其他内容将产生意想不到的结果。

    3)我想不出任何“this”的变异会允许以一种更标准、更熟悉的方式无法实现的事情。

        2
  •  2
  •   Norman Ramsey    15 年前

    我很惊讶你的老师这么紧张。这只是语言定义的变化。我认为不能改变 this 有用的 好的 语言设计,但我认为只要你坚持引用语义,这是一个有效的实验。

    不允许的主要原因 引用当前方法的接收器以外的任何内容是 你会混淆任何读过或写过面向对象程序的人的期望。 设计不好。