理解d写一次类型
有时,循环内
设置常
值,有时可抽象为λ
,但在静态环境
中不行.且置值
时,我还要处理,而不是直接返回
,但这又有另一个
循环.
用例是,我的类型集
中,有个常
属性.要验证他们都相同,并取出其值
.
是否有人有写一次
类型,即允许仅初化一次类型
,就像初化
值一样,运行时决定是否置
该类型.
类似可重绑定/尾常
,头不必为常
,只是需要复制进常引用
struct WriteOnce(T) {
const T payload;
const bool isSet;
void opAssign(U : T)(U data)
in (!isSet){
assert(!isSet);
@trusted() {
*(cast()&payload) = data;
*(cast()&isSet) = true;
}();
}
}
//上为hs.t
struct ColumnDef(T)//列类型
{
const TableDef table;//表,源,常
ExprString expr;//描述表达式,
alias type = T;
}
//计算列,定义1个从其他列计算出的类型的来定义列.相关了.
ColumnDef!T exprCol(T, Args...)(Args args)
{
//先找所有列,确保定义都来自该表
//列不能有多个表
const(TableDef)* tabledef;
foreach(ref arg; args)
{
static if(is(typeof(arg) == ColumnDef!U, U))
{
if(tabledef && arg.table != *tabledef)
throw new Exception("式中不能定义多表");
else
tabledef = &arg.table;
}
}
assert(tabledef !is null);
//构建表达式串
ExprString expr;
foreach(ref a; args)
{
static if(is(typeof(a) == string))
expr ~= a;
else
expr ~= a.expr;
}
return ColumnDef!(T)(*tabledef, expr);
//用的是指针抽象.
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现