d结构用要求
import std;
struct A
{
double val;
bool isBig;
}
void main() {
alias DListOfA = DList!A;
DListOfA[string] temp;
A a = {2.0, true};
DListOfA returnVal = temp.require("a", DListOfA());//--> 这里希望用DListOfA的引用
returnVal.insert(a);
writeln(temp);
}
参考
希望能够这样:
ref DListOfA returnVal = ....
但是不能保持
临时引用,因为临时在该表达式的末尾结束(实际上是在分号处).
或者用new
动态分配对象(并将DListOfA*
存储在关联数组中).然后,只要指针
在关联数组中,GC
就会让它保持活动状态.
更好选择是忘记它,因为D已经通过默认blitting
(位级复制)来处理右值
.一切正常…:)它也不贵.例如,复制结构很便宜.
但我可能错过了你想要ref
的原因.也许还有更好的选择.
使用指针:
DListOfA *returnVal = &temp.require(...);
returnVal.insert(a);
这样:
import object, std.container;
struct A
{
double val;
bool isBig;
}
void main()
{
alias DListOfA = DList!A;
DListOfA returnVal;
//DListOfA[string] temp;
DListOfA[string] temp = [
"a": DListOfA( A(0) )
];//*/
auto a = A(6, true); // replacement element
temp.update("a", {
return DListOfA( A(0) ); // not updated: unsucceeded but initialized
}, (ref DListOfAv) {
v = DListOfA( a ); // existing v has been replaced
returnVal = v;
assert(returnVal.front == a);
});
assert(is(typeof(temp["a"]) == DList!A));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现