String
String
یک رشته قابل رشد با کدگذاری UTF-8 است:
fn main() { let mut s1 = String::new(); s1.push_str("سلام"); println!("s1: len = {}, capacity = {}", s1.len(), s1.capacity()); let mut s2 = String::with_capacity(s1.len() + 1); s2.push_str(&s1); s2.push('!'); println!("s2: len = {}, capacity = {}", s2.len(), s2.capacity()); let s3 = String::from("🇨🇭"); println!("s3: len = {}, number of chars = {}", s3.len(), s3.chars().count()); }
String
پیادهسازیکننده Deref<Target = str>
است، که به این معناست که میتوانید تمام متدهای str
را بر روی String
فراخوانی کنید.
This slide should take about 5 minutes.
String::new
یک رشته جدید خالی برمیگرداند. ازString::with_capacity
استفاده کنید زمانی که میدانید چقدر داده میخواهید به رشته اضافه کنید.String::len
اندازه رشتهString
را بهصورت بایت برمیگرداند (که ممکن است با طول آن بهصورت کاراکتر متفاوت باشد).String::chars
یک تکرارگر (iterator) از روی کاراکترهای واقعی برمیگرداند. توجه داشته باشید که یکchar
ممکن است با آنچه که یک انسان به عنوان "کاراکتر" در نظر میگیرد، متفاوت باشد به دلیل grapheme clusters.- زمانی که مردم به رشتهها اشاره میکنند، ممکن است منظورشان
str&
یاString
باشد. - زمانی که یک تایپ،
<Deref<Target = T
را پیادهسازی میکند، کامپایلر به شما این امکان را میدهد که بهطور شفاف متدهایT
را فراخوانی کنید.- ما هنوز
Deref
trait را بررسی نکردهایم، بنابراین در این مرحله این بیشتر توضیحدهنده ساختار نوار کناری در مستندات است. String
پیادهسازیکننده<Deref<Target = str
است که بهطور شفاف دسترسی به متدهایstr
را فراهم میکند.;()let s3 = s1.deref
و;let s3 = &*s1
بنویسید و مقایسه کنید .
- ما هنوز
- بنویسید و مقایسه کنید
let s3 = s1.deref();
وlet s3 = &*s1;
. - راههای مختلف برای ایندکسگذاری یک
String
را مقایسه کنید:- به یک کاراکتر با استفاده از
()s3.chars().nth(i).unwrap
، جایی کهi
در محدوده است یا خارج از محدوده. - به یک زیررشته با استفاده از
[4..0]s3
، جایی که این برش در مرزهای کاراکترها است یا نباشد.
- به یک کاراکتر با استفاده از
- بسیاری از تایپ دادهها میتوانند با استفاده از متد
to_string
به رشته تبدیل شوند. این ترید بهطور خودکار برای تمام تایپهایی کهDisplay
را پیادهسازی میکنند، پیادهسازی شده است، بنابراین هر چیزی که میتواند قالببندی شود، همچنین میتواند به رشته تبدیل شود.