首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锡兰元模型

锡兰元模型
EN

Stack Overflow用户
提问于 2017-11-30 04:49:41
回答 0查看 97关注 0票数 2

我正在研究锡兰,对它的元模型有疑问。我想创建一些基类'DataContainer‘,它允许使用内置的等于散列实现实例化不可变的类:例如标识符(125,"ab") ==标识符(125,"ab"),因此基类应该收集所有共享的非变量值,并在“hash”和“equals”方法中使用这些信息。我写了下面的代码:

代码语言:javascript
复制
shared abstract class DataContainer(ClassDeclaration declaration) {
    value members = {
        for (i in declaration.memberDeclarations<ValueDeclaration>())
            if (!i.variable, i.name != "hash", i.name != "string") i
    };
    variable Integer? hashCode = null;

    shared actual Boolean equals(Object that) {
        if (is DataContainer that) {
            for (item in members) {
                value thisMember = item.memberGet(this);
                value thatMember = item.memberGet(that);
                if (exists thisMember, exists thatMember) {
                    if (thisMember != thatMember) { return false; }
                } else if (thisMember exists != thatMember exists) { return false; }
            }
            return true;
        }
        return false;
    }

    shared actual Integer hash => hashCode else (hashCode = calculateHash());

    Integer calculateHash() {
        variable value result = 0;
        for(i in members) {
            if (exists member = i.memberGet(this)) {
                result = result.xor(member.hash);
            }
        }
        return result;
    }
}

class Identifier(shared Integer? id, shared String? name) extends DataContainer(`class`) {}

Identifier类是DataContainer的客户端。总的来说,我喜欢这个解决方案,但我必须将' class‘传递给超类构造函数,因为如果我在DataContainer中使用'class’,它看不到任何子类的成员。如何在基类方法中获取扩展类成员的实际列表?像“这个”这样的东西不起作用。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47561579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档