2011-09-15 32 views
4

考虑下面的对象,斯卡拉创建VAL为外部范围

object A { 
     def setX(x:Int) = { 
      val x1 = x 
     } 

     def getx() = x1 
    } 

如果我创建内部setX的VAL X1是的范围将是法setX的。我真正想要做的是在方法外创建一个val,并在方法内分配值。没有使用var是不可能的,或者有什么办法可以做到吗?

请给我一个例子,如果你可以。

+3

如果getx()在setX()之前被调用,你希望发生什么?有很多方法可以做我认为你正在尝试做的事,但你的例子基本上是要求在没有可变状态的情况下可变状态。 – brandon

+0

当你调用'setX'两次会发生什么? 'val' *改变*?坏。它应该被忽略吗?也不好。它应该导致错误?可能是最好的,但仍然不好。 – Landei

+0

其实,这是一个scalaquery项目,我不想在这个例子中放置一个凌乱的scalaquery代码,这个方法是设置数据库,我可以保证,setX在运行时调用一次。不管怎样,谢谢你。 – tiran

回答

4

这就是val(“只读”)和var之间的区别。

所以不:不可能。

如果问题(不是所需的解决方案)得到更多解释,可能会有其他方法。

快乐编码。

0

它很难说,你真正想要什么来实现的,但往往将您的setX方法的伎俩:

def setX(x:Int) = { 
     x 
    } 

    val x1 = setX(x) 

,或者你可以创建一个SetOnce类,它包含一个值和允许精确设置一次...