Scala类字段不可见

时间:2016-01-03 16:32:39

标签: scala

我有以下类,嵌套在名为Solution的对象中:

class TreeNode(l_son: TreeNode, r_son: TreeNode,
               l_val: Int, r_val: Int, nr: Int)

此外,在对象Solution中,我尝试引用其字段:

def query(left: Int, right: Int, node: TreeNode): Int = {
        var sum = 0;
        if(left <= node.l_val && node.r_val <= right) {
            sum = node.nr
        }

但是,每次我引用其中一个字段时,都会收到错误:

  

Solution.scala:36:错误:值l_val不是Solution.TreeNode的成员               if(left&lt; = node.l_val&amp;&amp; node.r_val&lt; = right){                               ^   Solution.scala:36:error:value r_val不是Solution.TreeNode的成员               if(left&lt; = node.l_val&amp;&amp; node.r_val&lt; = right){                                             ^   Solution.scala:37:error:value nr不是Solution.TreeNode的成员                   sum = node.nr

我认为为字段自动创建getter和setter。如果这是真的,为什么我不能访问它们?

1 个答案:

答案 0 :(得分:4)

class TreeNode(l_son: TreeNode, r_son: TreeNode, l_val: Int, r_val: Int, nr: Int)等声明 没有定义任何类成员,只是构造函数参数。你仍然可以在类体中使用它们,就好像它们是成员一样(除了,你不能做this.l_son),因为整个体是在构造函数中定义的,所以它本质上是一个闭包。

要将类成员定义为构造函数参数,必须在构造函数参数列表中使用valvar作为前缀: class TreeNode(val l_son: TreeNode ...)

案例类的特殊之处在于它们将自动为每个构造函数参数创建一个(不可变的)成员,以及一组使案例类有用的其他自动成员。