我很困惑斯卡拉構造。例如,我有以下類,它們表示具有運算符的樹,如樹上的Add和Leaf節點是數字。斯卡拉構造混亂 - 請澄清
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)
}
}
我在一個網站上讀到什麼進去Scala的構造函數是自動不變(VAL),不過這傢伙對堆棧溢出說"The input parameters for the constructor are not vals unless you say they are."所以這是一個矛盾。
此外,我顯然可能會或可能不需要在構造函數中添加「val」和「override」出於某種原因?我的意思是我希望所有東西都是公共的,不可變的,添加的符號等於「+」,二進制等於加法函數,還有兩個數字a和b。有人可以請解釋如何使構造函數按照預期的方式在Scala中以非冗長的方式工作嗎?
我希望能夠做這樣的事情:
addition = Add(Number(1), Number(2))
addition.binaryOp(addition.a.value, addition.b.value)
REPL調用類參數vals。 'class C(x:Int){def mod(y:Int):Unit = x = y}'產生'錯誤:重新分配給val'。 – jwvh