برشها
یک برش به شما امکان میدهد نما (view) از یک مجموعه بزرگتر داشته باشید:
fn main() { let mut a: [i32; 6] = [10, 20, 30, 40, 50, 60]; println!("a: {a:?}"); let s: &[i32] = &a[2..4]; println!("s: {s:?}"); }
- برشها دادهها را از نوع برششده قرض میگیرند.
- پرسش: اگر
a[3]
را درست قبل از چاپs
تغییر دهید چه اتفاقی میافتد؟
-
ما با قرض گرفتن
a
و مشخص کردن شاخصهای شروع و پایان در براکتها، برش (slice) ایجاد میکنیم. -
اگر برش از شاخص ۰ شروع شود، سینتکس راست به ما اجازه میدهد شاخص شروع را حذف کنیم (یعنی عدد صفر را ننویسیم)، به این معنی که
&a[0..a.len()]
و&a[..a.len()]
یکسان هستند. -
در مورد شاخص آخر نیز همینطور است، بنابراین
&a[2..a.len()]
و&a[2..]
یکسان هستند. -
یک روش ساده برای برش کل آرایه، این است که از
&a[..]
استفاده کنیم.
s
یک مرجع به برش i32 است. توجه داشته باشید که نوع
s
(
&[i32]
) دیگر طول آرایه را ذکر نمیشود. این به ما امکان میدهد محاسباتی را روی برشهایی با اندازههای مختلف انجام دهیم.
-
برشها همیشه از یک شیء دیگر قرض میگیرند. در این مثال،
a
باید حداقل به اندازه طولعمر برش ما، زنده (در محدوده) باقی بماند. -
پرسش در مورد تغییر
a[3]
می تواند یک بحث جالب را شروع کند، اما پاسخاش این است که به دلایل ایمنی حافظه، نمیتوانید این کار را از طریقa
در این مرحله از اجرا انجام دهید، اما میتوانید دادهها را از هر دوa
وs
به طور ایمن بخوانید. این کار قبل از ایجاد برش و دوباره بعد ازprintln!
کار میکند، زمانی که برش دیگر استفاده نمی شود. جزئیات بیشتری در بخش بررسیکنندهقرض (the borrow checker) توضیح خواهیم داد.