Scala Language
ऑपरेटर ओवरलोडिंग
खोज…
कस्टम Infix ऑपरेटरों को परिभाषित करना
स्काला ऑपरेटरों में (जैसे +
, -
, *
, ++
, आदि) सिर्फ तरीके हैं। उदाहरण के लिए, 1 + 2
को 1.+(2)
रूप में लिखा जा सकता है। इस प्रकार के तरीकों को 'इनफिक्स ऑपरेटर्स' कहा जाता है।
इसका अर्थ है कि इन विधियों का पुनः उपयोग करते हुए कस्टम तरीकों को आपके स्वयं के प्रकारों पर परिभाषित किया जा सकता है:
class Matrix(rows: Int, cols: Int, val data: Seq[Seq[Int]]){
def +(that: Matrix) = {
val newData = for (r <- 0 until rows) yield
for (c <- 0 until cols) yield this.data(r)(c) + that.data(r)(c)
new Matrix(rows, cols, newData)
}
}
इन परिचालकों के रूप में परिभाषित तरीकों का इस्तेमाल किया जा सकता है:
val a = new Matrix(2, 2, Seq(Seq(1,2), Seq(3,4)))
val b = new Matrix(2, 2, Seq(Seq(1,2), Seq(3,4)))
// could also be written a.+(b)
val sum = a + b
ध्यान दें कि infix ऑपरेटर्स के पास केवल एक ही तर्क हो सकता है; ऑपरेटर के पहले ऑब्जेक्ट ऑपरेटर के बाद ऑब्जेक्ट पर अपना ऑपरेटर कहेगा। एकल तर्क के साथ किसी भी स्काला विधि का उपयोग इन्फिक्स ऑपरेटर के रूप में किया जा सकता है।
इसका उपयोग parcimony के साथ किया जाना चाहिए। यह आम तौर पर अच्छा अभ्यास माना जाता है, यदि आपकी खुद की विधि ठीक वही करती है जो उस ऑपरेटर से उम्मीद की जाती है। संदेह के मामले में, अधिक रूढ़िवादी नामकरण का उपयोग करें, जैसे
+
बजायadd
।
कस्टम यूनिरी ऑपरेटर्स को परिभाषित करना
unary_
ऑपरेटरों को unary_
साथ ऑपरेटर को unary_
करके परिभाषित किया जा सकता है। Unary ऑपरेटर्स unary_+
, unary_-
, unary_!
तक सीमित हैं unary_!
और unary_~
:
class Matrix(rows: Int, cols: Int, val data: Seq[Seq[Int]]){
def +(that: Matrix) = {
val newData = for (r <- 0 until rows) yield
for (c <- 0 until cols) yield this.data(r)(c) + that.data(r)(c)
new Matrix(rows, cols, newData)
}
def unary_- = {
val newData = for (r <- 0 until rows) yield
for (c <- 0 until cols) yield this.data(r)(c) * -1
new Matrix(rows, cols, newData)
}
}
अपर संचालक का उपयोग निम्नानुसार किया जा सकता है:
val a = new Matrix(2, 2, Seq(Seq(1,2), Seq(3,4)))
val negA = -a
इसका उपयोग parcimony के साथ किया जाना चाहिए। एक यूनियरी ऑपरेटर को एक ऐसी परिभाषा के साथ ओवरलोड करना जो वह नहीं है जो उम्मीद करता है कि कोड भ्रम हो सकता है।