我可以在Scala中将“public val”和“private var”放在一行吗?

时间:2011-02-14 00:33:39

标签: scala scala-2.8

即。是否可以创建一个不能从类外部分配的var?

3 个答案:

答案 0 :(得分:14)

现在,不,没有办法做到这一点。

您仅限于以下三线解决方案:

class Hider {
  private[this] var xHidden: Int = 0
  def x = xHidden
  private def x_=(x0: Int) { xHidden = x0 }
}

现在,类本身是唯一可以操作基础字段xHidden的人,而类的其他实例可以使用setter方法,每个人都可以看到getter方法。

如果你不介意使用不同的名字,你可以将var设为私有而忘记设置者(两行)。

没有“var to me,val to they”关键字。

答案 1 :(得分:4)

您可以执行以下操作:

class Test {
   private var myprivatevar = ""

   def publicvar = myprivatevar
}

在其他课程中,您只能使用publicvar,因为没有publicvar_=方法,您无法从外部分配。

答案 2 :(得分:-1)

你肯定会创建一个var,然后将它作为定义该字段的类的私有。

scala> class Holder(private var someValue: String) {       
     | def getValueOfOther(other: Holder) = other.someValue
     | def combinedWith(holder: Holder) = new Holder(holder1.someValue + " " + holder2.someValue)
     | def value = someValue
     | }
defined class Holder

scala> val holder1 = new Holder("foo")                                                   
holder1: Holder = Holder@1303368e

scala> val holder2 = new Holder("bar")                                                   
holder2: Holder = Holder@1453ecec

scala> holder2.getValueOfOther(holder1)                                                  
res5: String = foo

scala> val holder3 = holder1 combinedWith holder2
holder3: Holder = Holder@3e2f1b1a

scala> holder3.value
res6: String = foo bar