Casting

Rust هیچ implicit ندارد، اما از تبدیل‌های صریح با استفاده از as پشتیبانی می‌کند. این تبدیل‌ها معمولاً پیرو معنای C هستند که در آنجا تعریف شده‌اند.

fn main() {
    let value: i64 = 1000;
    println!("as u16: {}", value as u16);
    println!("as i16: {}", value as i16);
    println!("as u8: {}", value as u8);
}

نتایج استفاده از as همیشه در Rust تعریف شده و در تمامی پلتفرم‌ها ثابت هستند. این ممکن است با شهود شما برای تغییر علامت یا تبدیل به تایپ کوچکتر مطابقت نداشته باشد -- مستندات را بررسی کنید و برای وضوح بیشتر نظر دهید.

تبدیل تایپ با استفاده از as ابزاری نسبتاً حساس است که استفاده نادرست از آن آسان است و می‌تواند منبعی از اشکالات ظریف باشد، به خصوص زمانی که کار نگهداری آینده باعث تغییر تایپ‌های مورد استفاده یا دامنه مقادیر در تایپ‌ها شود. تبدیل‌ها بهتر است تنها زمانی استفاده شوند که قصد شما نشان دادن برش بدون قید و شرط باشد (مثلاً انتخاب 32 بیت پایین از یک u64 با as u32، بدون توجه به آنچه در بیت‌های بالا وجود دارد).

برای تبدیل‌های بدون خطا (مانند تبدیل u32 به u64)، استفاده از From یا Into بر as ارجح است تا تأیید شود که تبدیل در واقع بدون خطا است. برای تبدیل‌های با احتمال خطا، TryFrom و TryInto در دسترس هستند وقتی که می‌خواهید تبدیل‌هایی را که به شیوه‌ای متفاوت از آن‌هایی که مطابقت ندارند، مدیریت کنید.

This slide should take about 5 minutes.

در نظر داشته باشید که پس از این اسلاید استراحت کنید.

as مشابه به static_cast در ++C است. استفاده از as در مواردی که ممکن است داده‌ها از دست برود، معمولاً توصیه نمی‌شود یا حداقل نیاز به توضیحی کامنتی دارد.

این موضوع در تبدیل اعداد صحیح به usize برای استفاده به عنوان ایندکس رایج است.