Todas las cadenas son tratados como rangos de dchar
. Esto se debe a que se garantiza que un dchar
sea un único punto de código, ya que en UTF-32, cada unidad de código es un punto de código, mientras que en UTF-8 (char
) y UTF-16 (wchar
), punto varía Entonces, si estuvieras operando en los char
s individuales o wchar
s, estarías operando en pedazos de caracteres en lugar de caracteres enteros, lo que sería muy malo. Si no sabes mucho sobre Unicode, te aconsejo que leas this article de Joel Spolsky. Explica las cosas bastante bien.
En cualquier caso, debido a que operan en char
s individuales y wchar
s no tiene sentido, las cadenas de char
y wchar
son tratados como rangos de dchar
(ElementType!string
es dchar
), lo que significa que por lo que se refiere a los rangos, se no tienen length
(hasLength!string
es false
- walkLength
tiene que ser utilizado para obtener su longitud), no son rebanar (hasSlicing!string
es false
), y no son indexables (isRandomAccess!string
es false
). Esto también significa que cualquier cosa que genere un nuevo rango a partir de cualquier tipo de cadena dará como resultado un rango de dchar
. joiner
es uno de esos. Hay algunas funciones que entienden el Unicode y cadenas de casos especiales para la eficiencia, aprovechando la longitud, el corte y la indexación donde pueden, pero a menos que su resultado sea en última instancia una porción del original, cualquier rango que devuelvan tendrá que hacerse de dchar
s.
Por lo tanto, front
en cualquier rango de caracteres siempre será dchar
, y popFront
siempre mostrará un punto de código completo.
Si no sabe mucho acerca de los rangos, le aconsejo que lea this. Es un capítulo de un libro sobre D que está en línea y actualmente es el mejor tutorial sobre los rangos que tenemos. Realmente deberíamos obtener un artículo apropiado sobre los rangos (incluso sobre cómo funcionan con cadenas) en dlang.org, pero nadie ha estado a punto de escribirlo todavía. De todos modos, necesitará tener al menos una comprensión básica de los rangos para poder utilizar una gran cantidad de la biblioteca estándar de D (especialmente std.algorithm), ya que los usa mucho.