我相信我知道范围,但我不知道何时何地使用它们或如何使用它们。我无法“获得”范围。考虑这个例子:
假设我们有一个我们无法控制的网络处理程序,只要有一些新数据给我们,它就会在某个线程中调用我们的回调函数:
void receivedData(ubyte[] data)
此数据流包含具有布局的数据包
{
ushort size;
ubyte[size] body;
}
但是,网络处理程序并不知道这一点,因此调用dataReceived()
可能包含一个或两个部分数据包、一个或几个完整数据包或组合。为简单起见,我们假设没有损坏的数据包,并且data.length == 0
在连接关闭时我们会收到一个。
我们现在想要的是一些漂亮的 D 代码,将所有这些混乱变成适当的调用
void receivedPacket(ubyte[] body)
我当然可以想到实现这一目标的“蛮力”方法。但这也许是我的困惑所在:范围可以在其中发挥作用吗?我们可以总结receivedData()
成一个不错的范围吗?如何?或者这不是您使用范围的那种问题?为什么不?
(如果使用范围更有意义,请随意重新定义示例。)