uz.pets-trick.com
Ma `lumot

D&d ko‘z pirpiratuvchi it

D&d ko‘z pirpiratuvchi it


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.


D&,d miltillovchi it,

tuzilishi A{

//agar A strukturasidagi d inisializatsiya qilinmasa, kompilyator shikoyat qiladi

d:int,

}

fn main() {

//bu erda muammo yo'q, A strukturasidagi d boshlang'ichlashtirilmagan, shuning uchun d.foo()

// hali ham aniqlanmagan xatti-harakatlar

a: A,

a.d = 42,

//bu yerda muammo yo'q, biz d.foo() ga kira olamiz, chunki u ishga tushirilgan

//bu holda d.foo() &,a.d.foo() ga ekvivalentdir.

a.d.foo(),

//kompilyator bu yerda shikoyat qiladi, chunki A strukturasi agregatdir

a.d.bar(),

}

Struktura a'zosini a.d.bar() kabi &,self bilan chaqirish qonuniymi?

A:

Ha, bu qonuniy va buni qilish yaxshi fikr. Bu ham samaraliroq bo'lishi mumkin, chunki kompilyator bir marta "nomni aniqlash" ni amalga oshirishi va keyin bu ma'lumotdan keyingi funksiya chaqiruvlari uchun foydalanishi mumkin, agar u &,self parametri orqali chaqiriladigan funksiyani qatorga kiritishga qaror qilsa.

Misol:

struct SomeData<,'a, T: 'a>, {

id: &,'a str,

//...

}

fn do_stuff(ba'zi_ma'lumotlar: &,SomeData<,'a, i32>,) {

// bu yerda SomeData.id dan foydalaning

}

fn main() {

//...

let some_data = SomeData { id: "some-id"},

do_stuff(&,ba'zi_ma'lumotlar),

}

Agar kompilyator do_stuff funksiyasini qatorga kiritishga qaror qilsa, u SomeData tipidagi parametr 'a allaqachon hal qilinganligidan foydalanib, SomeData'ning id maydoni 'a bilan bog'langan va shuning uchun bu identifikatorga ishonch bilan murojaat qilish mumkin degan xulosaga kelishi mumkin. Kompilyator hatto vaqtinchalik SomeData turini ham yo'q qilishi mumkin, chunki u SomeData id maydoni bilan bir xil ishlash muddatiga ega va bu havolani bekor qilishdan boshqa hech narsa qolmaydi.

A:

@mattn ning javobiga qo'shimcha ravishda, bu qatorda kompilyator some_data turini &,SomeData<,'a, str>, o'rniga SomeData<,'a, str>, deb hisoblaydi.

let some_data = SomeData { id: "some-id"},

Bu Rust emas, SomeData va uning ishlash muddatini hal qiluvchi kompilyator. Xuddi Rust kompilyatori boshqa barcha tuzilmalarni o'z turlari va umriga qarab hal qiladi.

Rust esa struktura a'zosiga emas, balki funksiyadagi o'z-o'ziga a'zo bo'lishga ruxsat beradi. Sababi Rust strukturasi umumiy bo'lishi mumkin va Rust umumiy tuzilmalarni konkret tip bilan nomlash mumkin emasligini talab qiladi, shuning uchun Rust kompilyatori sizga &,self orqali struktura a'zosiga kirishni taqiqlaydi. Ammo, some_data.id saytiga kirganingizda, bu muammo bo'lmaydi, chunki Rust SomeData turini hal qila oladi va uni "a" bilan taxallus qilib bo'lmasligini biladi.

let some_data = SomeData { id: "some-id"},

some_data.id // bu yaxshi

&,some_data.id // bu emas

Qo'shimcha ma'lumot uchun rustc o'yin maydonchasiga qarang.

A:

Berilgan kod misolida:

bo'lsin d = {

foo() {}

},

d.foo &,d.foo bilan bir xil, ya'ni d.foo() &,d.foo() ga teng. Shuningdek, u &,d.foo().foo ga teng. Agar siz foo manzilini topmoqchi bo'lsangiz, &,d.foo() dan foydalaning.


Videoni tomosha qiling: What is a Grung in Du0026D?


Izohlar:

  1. Kagakus

    Question is a different answer

  2. Druas

    Your question how to rate?

  3. Zololmaran

    Unda biron bir narsa, sizning fikringiz yoqimli. Men umumiy munozara uchun olib borishni taklif qilaman.

  4. Tosida

    Bravo, remarkable idea



Xabar yozing