अजगर लोगों के लिए:
स्काला का _*
ऑपरेटर कमोबेश पायथन के * -ऑपरेटर के बराबर है ।
उदाहरण
लुइगी प्लिंज द्वारा उपलब्ध कराए गए लिंक से स्केला का उदाहरण प्रस्तुत करना :
def echo(args: String*) =
for (arg <- args) println(arg)
val arr = Array("What's", "up", "doc?")
echo(arr: _*)
अजगर की तरह दिखेगा:
def echo(*args):
for arg in args:
print "%s" % arg
arr = ["What's", "up", "doc?"]
echo(*arr)
और दोनों निम्नलिखित आउटपुट देते हैं:
क्या है
अप
डॉक?
अंतर: स्थितीय मापदंडों को खोलना
जबकि पायथन के *
-ऑपरेटर फिक्स्ड-एरिटी फ़ंक्शंस के लिए स्थितीय मापदंडों / मापदंडों के अनपैकिंग से भी निपट सकते हैं:
def multiply (x, y):
return x * y
operands = (2, 4)
multiply(*operands)
8
स्केल के साथ भी ऐसा ही करना:
def multiply(x:Int, y:Int) = {
x * y;
}
val operands = (2, 4)
multiply (operands : _*)
असफल हो जायेगी:
विधि के लिए पर्याप्त तर्क नहीं हैं: (x: Int, y: Int) Int।
अनिर्दिष्ट मूल्य पैरामीटर y।
लेकिन स्कैला के साथ इसे प्राप्त करना संभव है:
def multiply(x:Int, y:Int) = {
x*y;
}
val operands = (2, 4)
multiply _ tupled operands
लोरिन नेल्सन के अनुसार यह कैसे काम करता है:
पहला भाग, f _, आंशिक रूप से लागू फ़ंक्शन के लिए वाक्यविन्यास है जिसमें कोई भी तर्क निर्दिष्ट नहीं किया गया है। यह फंक्शन ऑब्जेक्ट की पकड़ पाने के लिए एक तंत्र के रूप में काम करता है। tupled एक नया फंक्शन देता है जो arity-1 का है जो एक सिंगल एरिटी-n tuple लेता है।
भविष्य वाचन:
def sum(xs: _*)
'एरर: अनबाउंड वाइल्डकार्ड टाइप' फेंकता है