【问题标题】:Equal objects with different identity?具有不同身份的相同对象?
【发布时间】:2014-04-11 15:08:30
【问题描述】:

是否可以在 Rascal 中创建具有不同标识的对象的克隆,以便它们相等但不相同?

【问题讨论】:

    标签: rascal


    【解决方案1】:

    不,Rascal 具有值语义。

    data X = x();
    bool alwaysTrue = x() == x();
    

    即使使用闭包、函数作为数据,您也无法构造两个可区分的实例ab,它们仍将在a == b 上返回true。原因是闭包永远不会被认为是相等的,除非你有一个指向同一个实例的别名。

    也没有克隆操作或类似的操作。只有表达式,它们的结果与创建它们的表达式树同构。

    从语义上讲,Rascal 不保证堆上的所有值实际上都是共享的,或者它们只是无法区分,因此内存优化的观点完全留给了运行时实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      相关资源
      最近更新 更多