কপিরাইট বা ক্লোন নয় এমন গ্লোবাল কনসেন্টগুলি কীভাবে মরিচায় কাজ করতে পারে?


20

বলুন আমার কাছে নিম্নলিখিত স্নিপেট রয়েছে ( খেলার মাঠ )

struct A {
    pub val: u32
}

const GLOBAL_A: A = A {val: 2};

fn main() {
    let some_a: A = GLOBAL_A;
    let other_a: A = GLOBAL_A;

    println!("double val = {}", some_a.val + other_a.val);
}

যেহেতু Aউভয়ই Cloneনয় এবং তাই আমিও Copyমানটি GLOBAL_Aস্থানান্তরিত হবে। এটি কোনও কনস্টের পক্ষে খুব একটা বোঝায় না এবং যেমন দেখানো হয়েছে তেমন কোনও ক্ষেত্রেই এটি হতে পারে না কারণ এটি দু'বার "স্থানান্তরিত" হতে পারে।

কি বিধি জারি করে যে অনুমতি দেয় কাজ উপরে স্নিপেট বিবেচনা করা হয় Aনা হয় Cloneনা Copy?

উত্তর:


21

ধ্রুবকরা সর্বদা অন্তর্ভুক্ত থাকে। আপনার উদাহরণ মূলত একই

struct A {
    pub val: u32
}

fn main() {
    let some_a: A = A {val: 2};
    let other_a: A = A {val: 2};

    println!("double val = {}", some_a.val + other_a.val);
}

মানটি দু'বার পুনর্গঠিত হয়, সুতরাং এটির দরকার হয় না Copyবা হয় Clone

অন্যদিকে, staticগুলি অন্তর্ভুক্ত নয়:

struct A {
    pub val: u32
}

static GLOBAL_A: A = A {val: 2};

fn main() {
    let some_a: A = GLOBAL_A;
}

ফলাফল স্বরূপ

error[E0507]: cannot move out of static item `GLOBAL_A`
 --> src/main.rs:8:21
  |
8 |     let some_a: A = GLOBAL_A;
  |                     ^^^^^^^^
  |                     |
  |                     move occurs because `GLOBAL_A` has type `A`, which does not implement the `Copy` trait
  |                     help: consider borrowing here: `&GLOBAL_A`
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.