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
در دسترس هستند وقتی که میخواهید تبدیلهایی را که به شیوهای متفاوت از آنهایی که مطابقت ندارند، مدیریت کنید.
در نظر داشته باشید که پس از این اسلاید استراحت کنید.
as
مشابه به static_cast
در ++C است. استفاده از as
در مواردی که ممکن است دادهها از دست برود، معمولاً توصیه نمیشود یا حداقل نیاز به توضیحی کامنتی دارد.
این موضوع در تبدیل اعداد صحیح به usize
برای استفاده به عنوان ایندکس رایج است.