স্কেলে অন্তর্নিহিত কাজগুলি :
পরিবর্তক
প্যারামিটার মান ইনজেক্টর
ইমপ্লিটের ব্যবহারের 3 প্রকার রয়েছে
সুস্পষ্টভাবে রূপান্তর টাইপ করুন : এটি ত্রুটি উত্পাদনের ক্ষেত্রে ত্রুটিটিকে উদ্দেশ্যমূলক প্রকারে রূপান্তর করে
ভাল এক্স: স্ট্রিং = "1"
ভাল y: ইন্ট = এক্স
স্ট্রিং ইন্টের সাব টাইপ নয় , সুতরাং লাইন ২-এ ত্রুটি ঘটে the ত্রুটিটি সমাধানের জন্য কমপাইলার স্কোপটিতে এমন একটি পদ্ধতি সন্ধান করবে যা অন্তর্নিহিত কীওয়ার্ড রয়েছে এবং একটি স্ট্রিংকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং একটি আন্তঃকে ফেরত দেয় ।
সুতরাং
implicit def z(a:String):Int = 2
val x :String = "1"
val y:Int = x // compiler will use z here like val y:Int=z(x)
println(y) // result 2 & no error!
সুস্পষ্টভাবে রিসিভার রূপান্তর : আমরা সাধারণত রিসিভার কল বস্তুর বৈশিষ্ট্য দ্বারা, যেমন। পদ্ধতি বা ভেরিয়েবল। সুতরাং কোনও প্রাপকের দ্বারা যে কোনও সম্পত্তি কল করতে সম্পত্তি অবশ্যই সেই প্রাপকের শ্রেণি / অবজেক্টের সদস্য হতে হবে।
class Mahadi{
val haveCar:String ="BMW"
}
class Johnny{
val haveTv:String = "Sony"
}
val mahadi = new Mahadi
mahadi.haveTv // Error happening
এখানে mahadi.haveTv একটি ত্রুটি তৈরি করবে। কারণ Scala কম্পাইলার প্রথম দেখবে haveTv করার সম্পত্তি Mahadi রিসিভার। এটি পাবেন না। দ্বিতীয়ত এটি স্কোলে এমন পদ্ধতি আবিষ্কার করবে যাতে অন্তর্নিহিত কীওয়ার্ড থাকবে যা মহাদী অবজেক্টকে যুক্তি হিসাবে গ্রহণ করে এবং জনি অবজেক্টকে ফিরিয়ে দেয় । তবে এটি এখানে নেই। সুতরাং এটি ত্রুটি তৈরি করবে । তবে নিম্নলিখিতটি ঠিক আছে।
class Mahadi{
val haveCar:String ="BMW"
}
class Johnny{
val haveTv:String = "Sony"
}
val mahadi = new Mahadi
implicit def z(a:Mahadi):Johnny = new Johnny
mahadi.haveTv // compiler will use z here like new Johnny().haveTv
println(mahadi.haveTv)// result Sony & no error
সুস্পষ্টভাবে প্যারামিটার ইঞ্জেকশন : আমরা যদি কোনও পদ্ধতি কল করি এবং এর পরামিতি মানটি পাস না করি তবে এটি ত্রুটি ঘটবে। স্কেল সংকলক এর মতো কাজ করে - প্রথমে মান পাস করার চেষ্টা করবে তবে এটি প্যারামিটারের জন্য কোনও সরাসরি মান পাবে না।
def x(a:Int)= a
x // ERROR happening
এটি কোনো জন্য চেহারা হবে দ্বিতীয় যদি প্যারামিটার কোনো অন্তর্নিহিত শব্দ রয়েছে Val মধ্যে সুযোগ যা আছে একই ধরনের মান। না পেলে ত্রুটি ঘটবে।
def x(implicit a:Int)= a
x // error happening here
Slove করার এই সমস্যা কম্পাইলার একটি জন্য চেহারা হবে অন্তর্নিহিত Val থাকার ইন্টারঅ্যাক্টিভ ধরণ কারণ পরামিতি একটি হয়েছে অন্তর্নিহিত শব্দ ।
def x(implicit a:Int)=a
implicit val z:Int =10
x // compiler will use implicit like this x(z)
println(x) // will result 10 & no error.
আরেকটি উদাহরণ:
def l(implicit b:Int)
def x(implicit a:Int)= l(a)
আমরা এটি যেমন লিখতে পারি-
def x(implicit a:Int)= l
কারণ ঠ টি অন্তর্নিহিত পরামিতি এবং সুযোগ পদ্ধতি এক্স লাশ , একটি হল অন্তর্নিহিত স্থানীয় পরিবর্তনশীল ( পরামিতি স্থানীয় ভেরিয়েবল ) একটি যার প্যারামিটার এক্স , তাই এক্স লাশ পদ্ধতি পদ্ধতি স্বাক্ষর L'গুলি অন্তর্নিহিত যুক্তি মান হয় দায়ের এক্স পদ্ধতি স্থানীয় অন্তর্নিহিত পরিবর্তনশীল (প্যারামিটার) a
পরোক্ষভাবে ।
সুতরাং
def x(implicit a:Int)= l
এই মত সংকলক হবে
def x(implicit a:Int)= l(a)
আরেকটি উদাহরণ:
def c(implicit k:Int):String = k.toString
def x(a:Int => String):String =a
x{
x => c
}
এটা, ত্রুটি কারণ কারণ হবে গ মধ্যে এক্স {এক্স => C} স্পষ্টভাবে মান-ক্ষণস্থায়ী আর্গুমেন্ট বা অন্তর্নিহিত Val দরকার সুযোগ ।
সুতরাং আমরা যখন পদ্ধতিটি এক্স বলি তখন আমরা ফাংশনটির আক্ষরিক পরামিতিটি স্পষ্টভাবে অন্তর্নিহিত করতে পারি
x{
implicit x => c // the compiler will set the parameter of c like this c(x)
}
এটি প্লে-ফ্রেমওয়ার্কের ক্রিয়া পদ্ধতিতে ব্যবহৃত হয়েছে
in view folder of app the template is declared like
@()(implicit requestHreader:RequestHeader)
in controller action is like
def index = Action{
implicit request =>
Ok(views.html.formpage())
}
আপনি যদি স্পষ্টভাবে নিখুঁতভাবে অনুরোধের প্যারামিটারটির উল্লেখ না করেন তবে আপনাকে অবশ্যই লিখিত থাকতে হবে-
def index = Action{
request =>
Ok(views.html.formpage()(request))
}