स्पष्ट करें मैं स्कैला कन्स्ट्रक्टर्स द्वारा बहुत उलझन में हूं। उदाहरण के लिए, मेरे पास निम्नलिखित वर्ग हैं जो पेड़ पर जोड़े और पत्ते नोड्स जैसे ऑपरेटरों के साथ एक वृक्ष का प्रतिनिधित्व करते हैं।स्कैला कन्स्ट्रक्टर भ्रम - कृपया
abstract class Node(symbol: String) {}
abstract class Operator(symbol: String,
binaryOp: (Double, Double) => Double) extends Node(symbol) {
}
class Add(a: Number, b: Number) extends
Operator("+", (a: Double, b: Double) => a+b) {
}
class Number(symbol: String) extends Node(symbol) {
val value = symbol.toDouble
def this(num: Double) {
this(num.toString)
}
}
मैं एक साइट में पढ़ा है कि क्या एक स्काला निर्माता में चला जाता है स्वचालित रूप से अपरिवर्तनीय (वैल) है, लेकिन स्टैक ओवरफ़्लो पर इस आदमी ने कहा "The input parameters for the constructor are not vals unless you say they are." तो यह है कि एक विरोधाभास है।
इसके अलावा, मुझे कुछ कारणों से रचनाकारों में "वैल" और "ओवरराइड" जोड़ने की आवश्यकता हो सकती है या नहीं? मेरा मतलब है कि मैं सबकुछ सार्वजनिक और अपरिवर्तनीय होना चाहता हूं और "+" के बराबर प्रतीक जोड़ने के लिए, अतिरिक्त कार्य के बराबर एक बाइनरी ओपी, और दो संख्या ए और बी भी है। क्या कोई व्यक्ति बता सकता है कि गैर-वर्बोज़ तरीके से स्कैला में अपेक्षित काम करने के लिए रचनाकारों को कैसे काम करना है?
addition = Add(Number(1), Number(2))
addition.binaryOp(addition.a.value, addition.b.value)
आरईपीएल कक्षा पैरामीटर vals कहते हैं। 'कक्षा सी (एक्स: इंट) {डीफ़ मोड (वाई: इंट): यूनिट = एक्स = वाई}' त्रुटि 'उत्पन्न करता है: वैल के लिए पुन: असाइनमेंट। – jwvh