无法在char数组上使用并行?

问题描述

我在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