راکت
حل شده

سوال در مورد تعریف متغیر با let

3 پاسخ

سلام وقتتون بخیر
من الان به یه موضوعی برخورد کردم که به نظرم به صورت منطقی نباید مشکلی داشته باشه اما مشکل داره!
من با کلمه کلیدی let تو دو تا case مجزا از یک switch یک متغیر همنام تعریف کردم . به این صورت :

switch ('foo') {
    case 'foo' :
        let message = 'This is test'
        break

    case 'bar' :
        let message = 'This is another test!'
        break
}

با وجود اینکه امکان نداره هر دو case با هم اجرا بشن اما بازم وب‌استورم زیر تعریف متغیر های منو قرمز کرده و به نظر ارور وجود داره
اما به نظر من منطقا نباید هیچ مشکلی باشه چون اولا متغیر message توی بلاک خاص خودش تعریف شده و ارتباطی با هم ندارن . دوما اصلا هیچ حالتی پیش نمیاد که هر دو case با هم بخواد اجرا بشه!

اما وب‌استورم برای من خطا گرفته و متن ارور هم اینه :
توضیح تصویر رو وارد کنید

مشکل کجاست به نظرتون؟

ثبت پرسش جدید

پاسخ‌ها

3
آرین حسینی
آرین حسینی
@arian

تخصص: Solidity Developer. Blockchain DApps Developer

بهترین پاسخ

سلام وقت بخیر
شما داخل یک scope دوتا متغیر message تعریف کردید،‌ کل case های شما داخل یک Scope هست.
@behzad.azizan1991

switch ("foo") {
    case "foo": {
        let message = "This is test";
        break;
    }

    case "bar": {
        let message = "This is another test!";
        break;
    }
}
آرمان پرویزی
آرمان پرویزی
@parvizi.arman

تخصص: برنامه نویس وب

سلام
همانطور که دوستمون گفتم کل switch یک scope محسوب میشه و اگر مجبورید از متغیر همنام استفاده کنید باید به ازای هر case یک تابع بنویسید و تابع را در case فراخونی کنید

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

من معمولا عملیات تعریف متغیر (declairation) متغیر رو بیرون switch انجام میدم و مقداردهیش (assignment) رو در داخل هر case به تناسب شرایط.

let message;

switch ('foo') {
    case 'foo' :
        message = 'This is test';
        break;

    case 'bar' :
        message = 'This is another test!';
        break;

    default:
    message = 'Unknown';
}

شاید پاسخ شما همین‌جا باشد

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام