Tất cả các dây được coi là phạm vi của dchar
(Không có gì về vấn đề này trong tài liệu http://dlang.org/phobos/std_algorithm.html#joiner là). Đó là bởi vì dchar
được đảm bảo là một điểm mã, vì trong UTF-32, mỗi đơn vị mã là một điểm mã, trong khi ở UTF-8 (char
) và UTF-16 (wchar
), số đơn vị mã trên mỗi mã điểm khác nhau. Vì vậy, nếu bạn đang hoạt động trên các cá nhân char
s hoặc wchar
s, bạn sẽ hoạt động trên các phần ký tự thay vì toàn bộ ký tự, điều này sẽ rất tệ. Nếu bạn không biết nhiều về unicode, tôi khuyên bạn nên đọc this article bởi Joel Spolsky. Nó giải thích mọi thứ khá tốt.
Trong mọi trường hợp, bởi vì hoạt động trên từng char
s và wchar
s không có ý nghĩa, chuỗi char
và wchar
được coi là phạm vi của dchar
(ElementType!string
là dchar
), có nghĩa là xa như dãy được quan tâm, họ không có length
(hasLength!string
là false
- walkLength
cần được sử dụng để có chiều dài), không thể cắt lát (hasSlicing!string
là false
) và không thể lập chỉ mục (isRandomAccess!string
là false
). Điều này cũng có nghĩa là bất kỳ thứ gì tạo nên một phạm vi mới từ bất kỳ loại chuỗi nào cũng sẽ dẫn đến phạm vi dchar
. joiner
là một trong số đó. Có một số hàm hiểu chuỗi unicode và chuỗi trường hợp đặc biệt cho hiệu quả, tận dụng chiều dài, cắt và lập chỉ mục ở nơi chúng có thể, nhưng trừ khi kết quả của chúng cuối cùng là một phần của bản gốc, bất kỳ phạm vi nào chúng trả về sẽ phải được thực hiện trong số dchar
s.
Vì vậy, front
trên bất kỳ phạm vi ký tự nào sẽ luôn là dchar
và popFront
sẽ luôn bật ra một điểm mã đầy đủ.
Nếu bạn không biết nhiều về phạm vi, tôi khuyên bạn nên đọc this. Đó là một chương trong một cuốn sách về D trực tuyến và hiện là hướng dẫn tốt nhất về các phạm vi mà chúng tôi có. Chúng tôi thực sự cần có được một bài viết thích hợp về các phạm vi (bao gồm cả cách họ làm việc với các chuỗi) trên dlang.org, nhưng chưa có ai đăng ký để viết nó. Bất kể, bạn sẽ cần phải có ít nhất một nắm bắt cơ bản của phạm vi để có thể sử dụng rất nhiều thư viện chuẩn của D (đặc biệt là std.algorithm), bởi vì nó sử dụng chúng rất nhiều.
Nguồn
2012-09-05 20:20:00