همونطور که میدونیم، راسط (احتمالا باید فارسیش اینطوری نوشته بشه) static type هست و باید نوع متغیرها رو در زمان کامپایل بدونه. بنابراین، این کد ارور میده و کامپایل نمیشه:
let my_number = if true {
42
} else {
"forty two"
};
دلیلش هم واضحه. راسط نمیدونه چقدر حافظه بهش اختصاص بده و اصلا نمیدونه توی stack باید نگهشداره یا heap.
ولی با توجه به اینکه توی راسط قابلیت shadowing داریم و میتونیم type رو هم عوض کنیم، میشه این کد رو نوشت:
let my_number = if true {
42
} else {
12345 // some useless number
};
let my_number = if false {
"forty two"
} else {
"some useless string"
};
خوب اینم که همون شد. فقط کار ما سختتر شد و یه دیتایی توی stack رفت که دیگه به هیچ اسمی bind نشده.
واقعا راهی نیست برای کوتاه شدن این کد، یا من هنوز بلد نیستم؟