【问题标题】:scala create val for outer scopescala为外部范围创建val
【发布时间】:2012-01-09 07:58:49
【问题描述】:

考虑以下对象,

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

        def getx() = x1
    }

如果我在 setX 中创建 val x1,那么它的作用域就是方法 setX。我真正想做的是在方法外部创建一个 val 并在方法内部分配值。不使用var是不可能的,或者有什么办法吗?

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

【问题讨论】:

  • 如果 getx() 在 setX() 之前被调用,你想发生什么?有很多方法可以做我认为您正在尝试做的事情,但是您的示例基本上是要求没有可变状态的可变状态。
  • 当您调用setX 两次时会发生什么? val 是否应该更改?坏的。它应该被忽略吗?也很糟糕。它应该导致错误吗?可能是最好的,但仍然不是很好。
  • 其实,这是一个scalaquery项目,我不想在这个例子中放一个乱七八糟的scalaquery代码,这个方法是设置数据库,我可以保证,setX被调用一次运行时。还是谢谢你。

标签: scala


【解决方案1】:

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

所以不:不可能。

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

编码愉快。

【讨论】:

    【解决方案2】:

    很难说你真正想要达到什么,但经常转换你的 setX 方法就可以了:

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

    或者您可以创建一个 SetOnce 类,该类包含一个值并允许仅设置一次...

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2022-11-10
      • 2015-09-12
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多