Scala '*' के बजाय Java में पैकेज आयात के लिए '_' ऑपरेटर का उपयोग क्यों करता है?


17

मेरी राय में, स्काला के बारे में सबसे बड़ी चीजों में से एक जावा और इसके समान सिंटैक्स के साथ इसकी अंतर है। एक बात जो मुझे अजीब _लगी *वह यह है कि जावा में उपयोग किए जाने वाले ऑपरेटर के बजाय पैकेज wilcard आयात के लिए ऑपरेटर का उपयोग होता है।

क्या _इसके बजाय उपयोग करने का कोई तकनीकी कारण है *? यदि नहीं, तो यह परिवर्तन क्यों किया गया?


यह सिर्फ एक कार्यात्मक बात हो सकती है। मुझे पता है कि हास्केल कुछ जगहों पर वाइल्डकार्ड / नॉन-निर्दिष्ट मूल्य के रूप में कार्य करने के लिए _ का उपयोग करता है।
KChaloux

जवाबों:


36

स्काला में, *एक मान्य पहचानकर्ता है। कोई लिख सकता है:

val * = "trollin'"
println(*)

परिणाम के साथ:

trollin'

एक वर्ग का नाम लिख सकता है *जैसे:

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

इसलिए ऐसा होने पर, जब मेरे पास *पैकेज में एक वर्ग होता है us.hexcoderऔर मैं लिखता हूं:

import us.hexcoder.*

आप कह रहे होंगे कि आप नाम के साथ एक वर्ग आयात करना चाहते हैं *। इस वजह से, स्काला को वाइल्डकार्ड आयात को इंगित करने के लिए दूसरे प्रतीक का उपयोग करने की आवश्यकता थी। जो भी कारण के लिए, उन्होंने _वाइल्डकार्ड प्रतीक के रूप में उपयोग करने का निर्णय लिया ।


9
प्रश्न यह हो जाता है कि, * को एक वैध पहचानकर्ता और वाइल्डकार्ड के रूप में क्यों चुना गया?
माइक पार्टरिज

2
हालांकि मेरे पास अधिक अपवोट्स हैं, यह अधिक सही उत्तर है। एक पहचानकर्ता के रूप में पहले कभी नहीं सुना।
माइकल ब्राउन

1
@ माइकबर्न यह लिस्प में भी मान्य है। यहाँ स्कीम

18
@ माइकपिट्रिज लगभग निश्चित रूप से क्योंकि स्काला अपने सभी ऑपरेटरों को कार्यों के रूप में परिभाषित करता है, और डेवलपर को अपने स्वयं के ऑपरेटरों को इस तरह परिभाषित करने की अनुमति देता है। यह ऑपरेटरों के लिए विशेष-केस सिंटैक्स नहीं करता है, और *गुणा के लिए शामिल करने की आवश्यकता है। तो एक और कम आम चरित्र को एक आरक्षित चरित्र के रूप में चुना जाना चाहिए।
KChaloux 23

3
_ चरित्र एक रिक्त जैसा दिखता है (जैसा कि "रिक्त स्थान में भरें"), इसलिए कि क्या स्काला ने इसे कहीं और से उधार लिया है या स्वयं इसके साथ आया है, यह वाइल्डकार्ड के रूप में उपयोग करने के लिए समझ में आता है।
माइकल शॉ

13

कार्यात्मक भाषाओं में, _ चरित्र आमतौर पर यह कहने के लिए उपयोग किया जाता है, "मुझे इस पैरामीटर की परवाह नहीं है" या "कुछ भी यहाँ जा सकता है"। नाम मान को आयात करने के लिए उस मूल्य का विस्तार केवल समझ में आता है।


2

ग्लेन के जवाब के अलावा, importस्काला में कहीं भी एक वैध बयान है और आप importऑब्जेक्ट या उदाहरण के सदस्यों को दायरे में ले सकते हैं। जैसा *कि स्पष्ट रूप से कई वर्गों का सदस्य है, यह importकथन के लिए वाइल्डकार्ड के रूप में उपयोग नहीं किया जा सकता है । तो आप एक स्ट्रिंग के साथ समाप्त होते हैं जो एक मान्य पहचानकर्ता नहीं होना चाहिए।

_दिमाग़ में आता है। तथ्य यह है कि यह एक अलग अर्थ के लिए अन्य स्थानों में उपयोग किया जाता है (अस्तित्व के प्रकार, एक उदाहरण के रूप में कार्य) भी इसी मुद्दे के कारण है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.