خرید بک لینک

1
fn first_not_negative_element(array: &[i32; 7]) -> &[i32] {
تغییر و تحول دوم که در به عبارتی  طراحی سایت خودرو خط تعریف و تمجید تابع چهره داده میباشد، نوع خروجی تابع میباشد. این توشه به جای این که یکی برگردانیم، یک رفرنس به آرایه ای از نوع i32 برمی گردانیم. اینجا دقیقاً داریم به کامپایلر میگوییم که قرار میباشد یک slice از آرایه را برگردانیم.
تغییر و تحول بعدی در خط سوم تابع میباشد. اینجا به مکان retu item که خویش مقدار را برمی گرداند، یک slice از آرایه را برمی گردانیم.

مقدار آغاز بازه زمانی ی این slice مقدار index مورد فعلی میباشد. مقدار انتهایی آن را هم برابر با index + 1 نهاده ایم تا فیض یک slice به ارتفاع یک گردد که صرفا به عبارتی ویّلین عنصری که مقدارش منفی وجود ندارد را دربرگیرنده می گردد.
در انتهای تابع هم برای هنگامی که کلیه موادسازنده ورودی منفی بودند، یک slice برمی گردانیم که به اندازه ی تمام آرایه میباشد. یعنی در واقعیت این slice از دید مقدار، به عبارتی آرایه ی ورودی خواهد بود.
نکته: برای اینکه یک slice به اندازه ی تمام collection بسازیم، قادر خواهیم بود range آن را به صورت [..] واردکنیم.

اکنون برویم سراغ تغییراتی که در تابع main دادیم. ویّلین و واضح ترین تغییر و تحول این میباشد که درحال حاضر به مکان my_array یک رفرنس از آن را به تابع first_not_negative_element می فرستیم، زیرا نوع ورودی آن تابع را تغییر و تحول داده ایم.

تغییر و تحول دوم امّا در شرط if صورت داده میباشد. ما بایستی بفهمیم که داخل not_negative_item یک slice به اندازه ی یک قرار دارد یااینکه مجموعّ آرایه. زیرا تابع ما طوری مندرج میباشد که چنانچه مقدار غیرمنفی ای پیدا نشد یک slice به اندازه ی تمام آرایه برگرداند.

برای درک کردن این مورد شیوه های متعددی وجود دارااست. اینجا ما با فراخوانی متد len، به عبارتی کاری که در خط پایان تابع first_not_negative_element کردیم، ارتفاع slice را گرفته ایم. درصورتی که ارتفاع خروجی تابع برابر با ۱ باشد، یعنی آیتمی که مقدارش منفی وجود ندارد در تابع پایینی پیدا شده است و ما قادر خواهیم بود پیام موفّقیّت را چاپ کنیم.
امّا در حالتی که این ارتفاع برابر ۱ نبود، یعنی کلیه ی آرایه ی ورودی بازگردانده شده است و این یعنی تمامی ی موادسازنده آرایه منفی بوده اند.
در حالتی که این نرم افزار را اجراکنیم خروجی تحت را خوا هیم گرفت:

1
First not negative element in the my_array is: [0]
درحال حاضر ببینیم آیا مشکلی که به خیال و خاطر آن سراغ slicing آمدیم حل شده است یا این که خیر. برای این عمل کافی میباشد مثل مثالی که در نصیب ابتدایی بود، کارایی کنیم مقدار متغیّر my_array را عوض کنیم.
بیایید امتحانش کنیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fn main() {
let mut my_array = [-5, -3, -10, 0, 1, 8, 9];
let not_negative_item = first_not_negative_element(&my_array);
if not_negative_item.len() == 1 {
println!("First not negative element in the my_array is: {:?}", not_negative_item);
} else {
println!("All elements of my_array are negative.");
}
my_array = [0i32; 7];
println!("Incorrect not negative value: {:?}", not_negative_item);
}
fn first_not_negative_element(array: &[i32; 7]) -> &[i32] {
for (index, &item) in array.iter().enumerate() {
if item > -1 {
retu &array[index..index + 1];
}
}
retu &array[0..array.len()];
}
این توشه بعداز چاپ کردن مقدار غیر منفی، عملکرد کرده ایم مقدار آرایه ی my_arrayرا عوض کنیم (درصورتی که این سیتنکس برایتان آشنا وجود ندارد با کلیک روی این نوشته به بخش یادگرفتن آرایه ها بروید).
درحال حاضر در صورتیکه بخواهیم این نرم افزار را کامپایل کنیم چه اتّفاقی می افتد؟

1
2
3
4
5
6
7
8
9
10
error[E0506]: caot assign to `my_array` because it is borrowed
--> src/main.rs:10:5
|
3 | let not_negative_item = first_not_negative_element(&my_array);
| -------- borrow of `my_array` occurs here
...
10 | my_array = [0i32; 7];
| ^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `my_array` occurs here

error: aborting due to previous error
 

برچسب: طراحی سایت خودرو, نویسنده: مهمان نواز تاريخ: پنجشنبه 27 آذر 1399 ساعت: 4:44

صفحه بندی