দ্যা রিস্ট প্রোগ্রামিং ল্যাঙ্গুয়েজের দ্বিতীয় সংস্করণে এখন এটি স্পর্শ করা হয়েছে । যাইহোক, এর পাশাপাশি কিছুটা ডুব দেই।
আসুন একটি সহজ উদাহরণ দিয়ে শুরু করা যাক।
বৈশিষ্ট্য পদ্ধতিটি ব্যবহার করা কখন উপযুক্ত?
দেরীতে বাইন্ডিং প্রদানের একাধিক উপায় রয়েছে :
trait MyTrait {
fn hello_word(&self) -> String;
}
বা:
struct MyTrait<T> {
t: T,
hello_world: fn(&T) -> String,
}
impl<T> MyTrait<T> {
fn new(t: T, hello_world: fn(&T) -> String) -> MyTrait<T>;
fn hello_world(&self) -> String {
(self.hello_world)(self.t)
}
}
যে কোনও বাস্তবায়ন / কার্য সম্পাদনের কৌশল উপেক্ষা করে উপরের উভয় অংশটি ব্যবহারকারীকে কীভাবে hello_world
আচরণ করা উচিত তা একটি গতিশীল পদ্ধতিতে নির্দিষ্ট করার মঞ্জুরি দেয় ।
এক পার্থক্য (শব্দার্থিক ভাবে) যে trait
বাস্তবায়ন গ্যারান্টী যে একটি প্রদত্ত টাইপ জন্য T
বাস্তবায়ন trait
, hello_world
সবসময় যেহেতু একই আচরণ থাকবে struct
বাস্তবায়ন একটি উদাহরণ হিসেবে বলা যায় প্রতি ভিত্তিতে একটি ভিন্ন আচরণ থাকার অনুমতি দেয়।
কোনও পদ্ধতি ব্যবহার উপযুক্ত কিনা তা নির্ভর করে ইউজকেসের উপর!
কোনও যুক্ত প্রকারটি ব্যবহার করা কখন উপযুক্ত?
একইভাবে trait
উপরের পদ্ধতিগুলির ক্ষেত্রে, সম্পর্কিত ধরণটি দেরী বাঁধাইয়ের একটি ফর্ম (যদিও এটি সংকলনের সময় ঘটে), ব্যবহারকারীকে trait
কোনও নির্দিষ্ট উদাহরণের জন্য নির্দিষ্ট করতে দেয় যা বিকল্পটি টাইপ করে। এটি একমাত্র উপায় নয় (এভাবে প্রশ্ন):
trait MyTrait {
type Return;
fn hello_world(&self) -> Self::Return;
}
বা:
trait MyTrait<Return> {
fn hello_world(&Self) -> Return;
}
উপরের পদ্ধতিগুলির দেরীতে বাঁধাইয়ের সমতুল্য:
- প্রথমটি প্রয়োগ করে যে কোনও প্রদত্তের জন্য
Self
এখানে একক Return
যুক্ত রয়েছে
- দ্বিতীয়, পরিবর্তে, বাস্তবায়ন অনুমতি দেয়
MyTrait
জন্য Self
একাধিক জন্যReturn
কোন ফর্মটি আরও উপযুক্ত তা নির্ভর করে unক্যবদ্ধতা প্রয়োগ করার বিষয়টি বোধগম্য কিনা on উদাহরণ স্বরূপ:
Deref
একটি সম্পর্কিত ধরণের ব্যবহার করে কারণ একতা ছাড়াই সংকলক অনুমানের সময় পাগল হয়ে যায়
Add
একটি যুক্ত প্রকার ব্যবহার করে কারণ এর লেখক ভেবেছিলেন যে দুটি যুক্তি দিয়ে একটি যুক্তিসঙ্গত রিটার্ন টাইপ হবে
যেমন আপনি দেখতে পাচ্ছেন, যদিও Deref
একটি সুস্পষ্ট ইউজকেস (প্রযুক্তিগত প্রতিবন্ধকতা) রয়েছে, তবে এর কেস Add
কম স্পষ্টভাবে কাটা হয়েছে: সম্ভবত i32 + i32
ফল দেওয়া i32
বা Complex<i32>
প্রসঙ্গের উপর নির্ভর করে বোধগম্য হবে ? তবুও, লেখক তাদের রায় প্রয়োগ করেছেন এবং সিদ্ধান্ত নিয়েছেন যে সংযোজনের জন্য রিটার্নের ধরণের ওভারলোডিং অপ্রয়োজনীয় was
আমার ব্যক্তিগত অবস্থান হ'ল সঠিক উত্তর নেই। তবুও, ইউনিটিটির যুক্তি ছাড়িয়ে আমি উল্লেখ করব যে সম্পর্কিত প্রকারগুলি নির্দিষ্ট করে নির্দিষ্ট পরামিতিগুলির সংখ্যা হ্রাস করার সাথে সাথে বৈশিষ্ট্য ব্যবহার করা সহজ করে তোলে, তাই যদি নিয়মিত বৈশিষ্ট্য পরামিতি ব্যবহারের নমনীয়তার সুবিধাগুলি সুস্পষ্ট না হয় তবে I সম্পর্কিত প্রকারের সাথে শুরু করার পরামর্শ দিন।
trait/struct MyTrait/MyStruct
একimpl MyTrait for
বা একটিকে অনুমতি দেয়impl MyStruct
।trait MyTrait<Return>
একাধিকimpl
গুলি এর অনুমতি দেয় কারণ এটি জেনেরিক।Return
যে কোনও ধরণের হতে পারে। জেনেরিক স্ট্রাক্ট একই।