স্কেল কেন জাভা হিসাবে '*' এর পরিবর্তে প্যাকেজ আমদানির জন্য '_' অপারেটর ব্যবহার করে?


17

আমার মতে, স্কালা সম্পর্কে সর্বাধিক বড় জিনিসগুলির মধ্যে এটি জাভা এবং এর অনুরূপ সিনট্যাক্সের সাথে আন্তঃযোগেয়তা। একটি জিনিস যা আমি অদ্ভুত পেয়েছি তা হল জাভাতে ব্যবহৃত অপারেটরের _পরিবর্তে প্যাকেজ উইলকার্ড আমদানির জন্য *অপারেটরের ব্যবহার।

_পরিবর্তে ব্যবহারের জন্য কি কোনও প্রযুক্তিগত কারণ আছে *? যদি তা না হয়, তবে কেন এই পরিবর্তন করা হয়েছিল?


এটি কেবল একটি কার্যকরী জিনিস হতে পারে। আমি জানি হাস্কেল ওয়াইল্ডকার্ড / নির্দিষ্ট না হওয়া মান হিসাবে কিছু জায়গায় _ ব্যবহার করে।
কেচালাক্স

উত্তর:


36

স্কালায়, এটি *একটি বৈধ শনাক্তকারী। একজন লিখতে পারেন:

val * = "trollin'"
println(*)

ফলাফল হচ্ছে:

trollin'

যে কোনও নামে একটি ক্লাস লিখতে পারে *:

class * {
  def test():String = {
    "trollin'"
  }
}

সুতরাং সেই ক্ষেত্রে যখন আমার *প্যাকেজে ক্লাস হয় us.hexcoderএবং আমি লিখি:

import us.hexcoder.*

আপনি বলবেন যে আপনি নামের সাথে একটি শ্রেণি আমদানি করতে চান *। এ কারণে, স্কালার একটি ওয়াইল্ডকার্ড আমদানি নির্দেশ করতে অন্য প্রতীক ব্যবহার করা দরকার। যে কারণেই হোক না কেন, তারা _ওয়াইল্ডকার্ড প্রতীক হিসাবে ব্যবহার করার সিদ্ধান্ত নিয়েছে ।


9
তাহলে প্রশ্ন ওঠে, কেন * বৈধ সনাক্তকারী এবং _ ওয়াইল্ডকার্ড হিসাবে বেছে নেওয়া হয়েছিল?
মাইক পার্টরিজ

2
যদিও আমার আরও বেশি আপোস্ট রয়েছে তবে এটি আরও সঠিক উত্তর। এর আগে শনাক্তকারী হিসাবে কখনও শুনিনি।
মাইকেল ব্রাউন

1
@ মাইকব্রাউন এটি লিস্পেও বৈধ। এখানে স্কিমের

18
@ মাইকপ্যাট্রিজ প্রায় নিশ্চিতভাবেই কারণ স্কালা তার সমস্ত অপারেটরকে ফাংশন হিসাবে সংজ্ঞায়িত করে এবং বিকাশকারীকে তাদের নিজস্ব অপারেটরগুলিও এর মতো সংজ্ঞায়িত করতে দেয়। এটি অপারেটরদের জন্য বিশেষ-ক্ষেত্রে সিনট্যাক্স করে না এবং *গুণনের জন্য অন্তর্ভুক্ত করা দরকার। সুতরাং আর একটি কম সাধারণ চরিত্রকে সংরক্ষিত চরিত্র হিসাবে বেছে নেওয়া দরকার।
কেচালাক্স

3
_ চরিত্রটি একটি ফাঁকা দেখতে পাওয়া যায় (যেমন "শূন্যস্থান পূরণ করুন"), সুতরাং স্কালা এটিকে অন্য কোথাও থেকে ধার নিয়েছে বা এগুলি নিজেই নিয়ে এসেছিল কিনা, এটি ওয়াইল্ডকার্ড হিসাবে ব্যবহার করা বোধগম্য।
মাইকেল শ

13

কার্যকরী ভাষায়, _ চরিত্রটি সাধারণত বলা হয়, "আমি এই প্যারামিটারটির যত্ন করি না" বা "এখানে কিছু যেতে পারে" " নাম স্পেস আমদানিতে সেই মানটি প্রসারিত করা কেবলমাত্র বোধগম্য।


2

গ্লেনের উত্তর ছাড়াও, importস্কালার যে কোনও জায়গাতেই একটি বৈধ বিবৃতি এবং আপনি importকোনও বস্তু বা কোনও উদাহরণ সদস্যকে স্কোপে রাখতে পারেন। হিসাবে *স্পষ্টত অনেক ক্লাস সদস্য, এটির জন্য একটি ওয়াইল্ডকার্ড রূপে ব্যবহার করা যাবে না importবিবৃতি। সুতরাং আপনি একটি স্ট্রিং দিয়ে শেষ করবেন যা কোনও বৈধ শনাক্তকারী হতে হবে না।

_মনে আসে. এটি অন্য স্থানে অন্য অর্থের জন্য ব্যবহৃত হয় (অস্তিত্বের ধরণ, উদাহরণ হিসাবে ফাংশন) এটি একই সমস্যার কারণেও।


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