উত্তর:
কিছু জিনিস চলছে।
প্রথমত, স্কালা বহু পদ্ধতি কল থেকে বিন্দু এবং পেরেনগুলি বাদ দিতে দেয়, তাই * এর 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় বাস্তবায়ন?