问题描述
我在D的在线旅游和本地的ldc上都尝试过此操作。这个错误使我感到困惑。 与int相比,char有什么特别之处,以至于不能将其作为并行引用?
import std.stdio : writeln;
import std.parallelism;
void main()
{
auto arr = [1,2,3,4,5,6,7,8];
foreach(ref i; parallel(arr)) {
//writeln(typeid(i));
i = i*i;
}
writeln(arr);
auto result = [ 'w','e','l','c','o','m','t','d'];
//foreach( ref c; parallel(result)) --> Error: foreach: cannot make c ref
foreach( ref c; result)
{
//writeln(typeid(c));
c = 'a';
}
writeln(result);
writeln(typeid(arr));
writeln(typeid(result));
}
解决方法
char
某种程度上是部分类型的-它代表一段unicode字符,而不是整个字符。考虑一个中文字符维-它在内存中的表示形式是E7 BB B4
,或者是三个char
的数组。因此,D不允许您像其他类型一样对char
进行操作。
D没有用于ASCII文本的单独类型,因此如果要将字符串视为ASCII,则应使用ubyte[]
而不是char[]
。
默认情况下,Phobos将char数组视为dchar的双向范围。要覆盖它,请使用std.utf.byCodeUnit。 https://dlang.org/library/std/utf/by_code_unit.html