d用联还是用变量
enum F_Type{
CONS,
STRN,
NMBR,
EROR,
BOOL,
FUNC,
}
struct Atom{
F_Type kind;
Atom* car;
Atom* cdr;
double num;
string str;
bool bul;
F_Error err = F_Error.NOVALUE;
}
已跟踪数据类型,用联
.
struct Atom {
F_Type kind;
union {
Atom* car;
Atom* cdr;
double num;
string str;
bool bul;
F_Error err = F_Error.NOVALUE;
}
}
一般,我建议std.sumtype
.它按包含构/所有要求类型的联
两个字段实现.
即,你可能面临重构
代码来使用匹配(match)
和试匹配(tryMatch)
函数,因为std.sumtype.SumType
不会公开底层种类
字段.
有几个字段
需要共存.需要{car
,cdr
}或{num
}或{str
}或{bul
}.
由于这是动态类型化
语言,我需要原子
既可以互换,又可以同时服务
不同目的.
只需要构建嵌套匿名构
:
struct Atom {
F_Type kind;
union {
struct {
Atom* car;
Atom* cdr;
}
struct {
double num;
string str;
}
bool bul;
}
F_Error err = F_Error.NOVALUE;
//再添加了构造器.
this( double n ){ kind = F_Type.NMBR; num = n; } // make number
this( string s ){ kind = F_Type.STRN; str = s; } // make string
this( bool b ){ kind = F_Type.BOOL; bul = b; } // make bool
this( Atom* a, Atom* d ){ kind = F_Type.CONS; car = a; cdr = d; } // make cons
this( F_Error e, string m ){ kind = F_Type.EROR; err = e; msg = m; } // make error
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现