d的输出区间
D的输出区间
import std.stdio;
import std.range;
void main() {
int[] arr = [1, 2, 3, 4, 5];
auto s = arr;
writeln(s); // [1, 2, 3, 4, 5]
s.put(100); // 无输出,对吗?
writeln(s); // [2, 3, 4, 5]
}
//
int[] arr = [1, 2, 3, 4, 5];
auto s = arr;
s.put(100);
writeln(arr); // [100, 2, 3, 4 ,5];
文档
put
不应使用"UFCS"
风格,如r.put(e)
.这样做可能会直接调用R.put
,绕过Range.put
提供的转换功能.首选put(r,e)
.
put
按数组切片
对待动态数组
,并在复制
元素后在切片
上调用popFront
.
调用put
之前,一定
要保存数组
位置.
put
放对象在哪里
,为什么?
哪里
取决于输出区间
是什么.put
是可根据目标对象
实现各种事情的通用接口
.可能流式
传输到标准输出
,可能会放进数据缓冲区
,等等.
你这里,库把它解释为固定大小的缓冲区
,并把复制数据put(放)
到其中.实现就像:
复制数据至缓冲
步进缓冲
更新缓冲剩余空间
因此需要
在开始时保留
切片的单独引用
,否则它会复制并前进
,所以东西
刚刚消失了.为什么它会这样做呢.
int[32] originalBuffer;
int[] buffer = originalBuffer[];
put(buffer, 5);
put(buffer, 6);
// 上个步进空间,该调用依然工作.
最后实际使用了多少缓冲区
?这是步进
的另一用法
:可减去
它来计算
int[] usedBuffer = originalBuffer[0 .. $ - buffer.length];
只取原始文件中的所有内容
,除了输出区间
中剩余空间
.示例
示例用动态
内部缓冲区显示.
static struct A {
string data;
void put(C)(C c) if (isSomeChar!C) {
data ~= c;
}
}
put
方法复制字符
进内部串
中,因此会按需增长
,然后data.length
告诉你有多大了.(顺便,stdlib
的appender
类似)
输出区间
接口非常小,只需要put
函数,也不要求你.如果正在写入标准输出
,长度不重要
,不必返回
数据给用户.因而不用~=
附加符.
它去了哪里,为什么?视对象
而定!输出区间/put
就是收集数据并处理它
.它就是最终目的地
,因此不像其他区间
那样支持链接
.
使用内置切片
,它复制
数据给它,并步进
位置来准备接受更多数据
.你需要跟踪
,得到了很大的灵活性和效率
.追加器文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现