কোনও ভেরিয়েবল এবং ফাংশনটির একই নাম থাকলে আমি কীভাবে ফাংশনটিকে কল করব?


10

একটি ভেরিয়েবল এবং ফাংশনের একই নাম থাকে। আমি কিভাবে ফাংশন কল করব?

fn main() {
    let a = 1;
    fn a() -> i32 {
        2
    }
    println!("{}", a());
}

মরিচা সংকলক আমাকে বলেছিল:

error[E0618]: expected function, found `{integer}`

অন্য কথায়, মরিচা সংকলক aফাংশনটি কল করে না , পরিবর্তে aভেরিয়েবলটি অ্যাক্সেস করে ।


10
আমি সুস্পষ্ট সমাধানটি বর্ণনা করব: ফাংশনের মতো একই নাম রাখতে আপনার ভেরিয়েবলকে বাধ্য করার মতো কিছুই নেই । ইহা পরিবর্তন করুন.
শেপমাস্টার

উত্তর:


9

এটি করা যায় না কারণ আপনার যেখানে যেখানে রয়েছে সেখানে ফাংশন এবং পূর্ণসংখ্যা উভয়ই নেই println

ফাংশনগুলি সাধারণত পুরো সুযোগের জন্য উপলব্ধ (যেমন আপনি তাদের ঘোষণার আগে এগুলি ব্যবহার করতে পারেন), তাদের ঘোষণাটি ধারণাগতভাবে সুযোগের শুরুতে সরিয়ে নেওয়া হয় (তারা "উত্তোলিত")।

এর পরিণতি হ'ল ফাংশন ঘোষণাটি পূর্ণসংখ্যের পরিবর্তনশীল ঘোষণার আগে এবং ছায়াযুক্ত হয়।

আপনার কোডের আসল ফিক্সটি আপনার সঠিক পরিস্থিতির উপর নির্ভর করবে। এরকম কিছু হতে পারে:

fn main() {
    {
        let a = 1;
        // use the integer there
    }
    fn a() -> i32 {
        2
    }
    println!("{}", a());
}

4
: যেমন ছায়া একই ধারণা প্রকাশ করার বিপরীত play.rust-lang.org/...
Ömer Erden

1
অথবা, আপনি জানেন, দুটি ভিন্ন ভিন্ন বস্তুর জন্য একই নাম ব্যবহার করবেন না।
সংগৃহীত

ধারণামূলকভাবে তোলা হয়েছে? আমার কাছে বাগের মতো মনে হচ্ছে; সুযোগ লেকিকাল ক্রমে হওয়া উচিত। ইওএফ-ওয়াই সাইড আপ, স্ক্র্যাম্বল নয়।
কাজ

4
@ কাজ ইন ইন জাস্ট আপনি কোনও ফাংশনটিকে কল করতে পারেন তা উপেক্ষা করে আপনি এটির আগে বা পরে ঘোষণা করেছিলেন কিনা whether এটি কোনও বাগ নয়, এটি খুব সুবিধাজনক
ডেনিস সাগুরেট

@ DenysSéguret সেক্ষেত্রে সেই নামস্থলের সমস্ত সনাক্তকারীকে একই নিয়ম অনুসরণ করা উচিত। আমার যদি কোনও ফাংশন-মূল্যবান ভেরিয়েবল থাকে? এটি একই সুযোগে ফাংশনগুলির মিশ্রণের সাথে সমানভাবে আচরণ করা উচিত।
কাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.