উত্তর:
কিছু জিনিস চলছে।
প্রথমত, স্কালা বহু পদ্ধতি কল থেকে বিন্দু এবং পেরেনগুলি বাদ দিতে দেয়, তাই * এর 20 secondsসমতুল্য 20.seconds()।
দ্বিতীয়ত, একটি "অন্তর্নিহিত রূপান্তর" প্রয়োগ করা হয়। যেহেতু 20একটি হল Intএবং Intকোন হয়েছে secondsপদ্ধতি, একটি অন্তর্নিহিত রূপান্তর যে লাগে জন্য কম্পাইলার অনুসন্ধান Intএবং আয় কিছু আছে একটি secondsঅনুসন্ধান আপনার পদ্ধতি কল সুযোগ দ্বারা সীমাবদ্ধ সঙ্গে পদ্ধতি।
আপনি নিজের সুযোগে সময়কালীন আমদানি করেছেন । যেহেতু প্যারামিটার DurationIntসহ একটি অন্তর্ভুক্ত শ্রেণি Int, তাই এর নির্মাতা একটি অন্তর্নিহিত Int => DurationIntরূপান্তর সংজ্ঞায়িত করে । DurationIntএকটি secondsপদ্ধতি আছে, সুতরাং এটি অনুসন্ধানের সমস্ত মানদণ্ডকে সন্তুষ্ট করে। অতএব, সংকলকটি আপনার কলকে new DurationInt(20).seconds** হিসাবে পুনরায় লিখবে।
* আমি এটিকে শিথিলভাবে বলতে চাইছি। 20.seconds()প্রকৃতপক্ষে অবৈধ কারণ secondsপদ্ধতির কোনও প্যারামিটারের তালিকা নেই এবং সেইজন্য পদ্ধতি কলটিতে প্যারেনগুলি বাদ দিতে হবে।
** প্রকৃতপক্ষে, এটি একেবারেই সত্য নয় কারণ DurationIntএকটি মান শ্রেণি, তাই সংকলক যদি সম্ভব হয় তবে পূর্ণসংখ্যা মোড়ানো এড়াতে পারে।
new DurationInt(20).seconds()এটির কীভাবে আপনি জানেন ততদিনের চেয়ে অনেক বেশি পঠনযোগ্য )
secondsপদ্ধতিটি পেরেন ছাড়াই সংজ্ঞায়িত করা হয়েছে, সুতরাং প্যারেন্সের সাথে এটি কল করা একটি ত্রুটি।
20.seconds()স্কালায় লিখতে পারেন , কেবল যে সংকলক কলটি সেইভাবে অনুবাদ করছে। এটি উল্লেখ করার মতো যে যদি সম্পর্কিত পদ্ধতিটির কোনও পরামিতি তালিকা না থাকে তবে স্কালার জন্য আপনাকে প্যারেনগুলি বাদ দিতে হবে।
সেখানে যে "যাদু" চলছে, তাকে "অন্তর্নিহিত রূপান্তর" বলা হয়। আপনি অন্তর্নিহিত রূপান্তরগুলি আমদানি করছেন এবং তাদের মধ্যে কয়েকজন সময়কালে ইন্টার (এবং ডাবল) এর মধ্যে রূপান্তর পরিচালনা করে। এটাই আপনি কাজ করছেন।
import scala.concurrent.duration._সমাধান করে 20 secondsতবে প্রকৃতপক্ষে ট্রেইটটি আমদানি করা DurationConversionsহয় না কেন? সম্পাদনা : তারা আসলে কী আমদানি করছে তা ঠিক উপলব্ধি করে DurationInt। আমি অনুমান করছি এটি কারণ আপনি প্রকৃত বৈশিষ্ট্যটি আমদানি করতে পারবেন না? কেবলমাত্র বৈশিষ্ট্যটির একটি দৃ concrete় বাস্তবায়ন?