खोज…


कस्टम 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 के साथ किया जाना चाहिए। एक यूनियरी ऑपरेटर को एक ऐसी परिभाषा के साथ ओवरलोड करना जो वह नहीं है जो उम्मीद करता है कि कोड भ्रम हो सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow