স্ব-টাইপ টিকাতে এই এবং স্বের মধ্যে পার্থক্য?


134

বিভিন্ন স্কাল সাহিত্যে আমি কিছু "স্ব" ব্যবহার করে স্ব-টাইপ টিকাগুলি দেখি এবং অন্যরা "স্ব" ব্যবহার করে:

trait A { this: B => ... }
trait A { self: B => ... }

"এই" বা "স্ব" ব্যবহারের মধ্যে কোনও বাস্তব পার্থক্য আছে কি? আপনি কোন নাম ব্যবহার করেন তা কি আদৌ কিছু যায় আসে? এটি কি ঠিক বৈধ?

trait A { foo: B => ... }

উত্তর:


181

তিনটি ফর্মই বৈধ, এবং ক্লাসের Bধরণ হিসাবে ধরা হয় এমন প্রভাব রয়েছে ।thisA

প্রথম দুটি রূপ ts

trait A { self: B => ... }
trait A { foo: B => ... }

self(যথাক্রমে foo) thisবৈশিষ্ট হিসাবে পরিচয় করিয়ে দিন A। এটি thisঅভ্যন্তরীণ শ্রেণীর থেকে রেফারেন্স অ্যাক্সেসের জন্য দরকারী । অর্থাৎ এরপরে আপনি কোনও শ্রেণীর কাছাকাছি থাকা বৈশিষ্ট্যের রেফারেন্সটি অ্যাক্সেস করার selfপরিবর্তে ব্যবহার করতে পারেন । উদাহরণ:A.thisthisA

class MyFrame extends JFrame { frame =>    
  getContentPane().add( new JButton( "Hide" ) {
    addActionListener( new ActionListener {
      def actionPerformed( e: ActionEvent ) {
        // this.setVisible( false ) --> shadowed by JButton!
        frame.setVisible( false )
      }
    })
  })
}

তৃতীয় রূপ,

trait A { this: B => ... }

জন্য একটি উপকরণ পরিচয় করিয়ে দেয় না this; এটি কেবল স্ব-ধরণের সেট করে।


আমি স্ব-প্রকারের দিকে যেভাবে দেখি তা হ'ল বৈশিষ্ট্যটি নিজেকে নির্দিষ্ট ধরণের হিসাবে গ্রহণ করে এবং কোড ব্লক যেমন foo: B => {... returning ফিরিয়ে আনে বলে ঘোষণা করে} এখন সেই সরুগুলি অবশ্যই বাদ দেওয়া হয়েছে। এটি দেখতে আকর্ষণীয় যে আপনি কোডের যে কোনও সুযোগের অভ্যন্তরে "এটি" এর পরিবর্তে অবজেক্টের নামটি ব্যবহার করতে পারেন যদিও [জাভাস্ক্রিপ্টে আমরা সব সময় কিছু করি]
ওস্তামান সংগীত

4
@ মার্টিন ওডারস্কি কি এমন দুটি কিছুর জন্য আরও দুটি বা আরও বৈশিষ্ট্যের জন্য বিধিনিষেধ যুক্ত করা সম্ভব trait A { self: B, C => ... }?
দিমিত্রি বেসপালভ

13
@ দিমিত্রিবেসপলভ: হ্যাঁ, আপনি withস্ব-টাইপিং টীকায় কীওয়ার্ডটি ব্যবহার করতে পারেন । উদাহরণস্বরূপtrait A { self: B with C => ... }
ডেভ


17

এর মধ্যে একটি পার্থক্য রয়েছে thisসর্বদা অভ্যন্তরীণ টেম্পলেট দ্বারা সংজ্ঞায়িত অবজেক্টটিকে।

অভিব্যক্তিটি thisকোনও টেম্পলেট বা যৌগিক ধরণের স্টেটমেন্ট অংশে উপস্থিত হতে পারে। এটি অবজেক্টটি অন্তর্নিহিত টেম্পলেট বা যৌগিক প্রকার দ্বারা রেফারেন্সটি সংযুক্ত করে সংজ্ঞায়িত হচ্ছে for এটি যদি কোনও যৌগিক ধরণের হয় তবে প্রকারটি thisসেই যৌগিক প্রকার। যদি সহজ নামের সঙ্গে একটি শ্রেণী বা বস্তুর সংজ্ঞা একটি টেমপ্লেট সি , এই ধরনের ধরণ হিসাবে একই সিthis। (স্কেলা রেফারি §6.5)

সুতরাং, যদি আপনি নিজের স্ব-টাইপকে কল করেন তবে আপনি fooএখনও এটিকে হিসাবে উল্লেখ করতে পারেন this(যদি না, আপনি অবশ্যই কোনও অভ্যন্তরীণ টেমপ্লেটে থাকেন যার ক্ষেত্রে thisএটির দ্বারা নির্ধারিত অবজেক্টটি উল্লেখ করা হয় - এবং আপনি যদি অভ্যন্তরটিকে না দেন তবে টেমপ্লেটের স্ব-টাইপ একই নাম) তবে অবশ্যই অন্যভাবে নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.