在scala中的方法内创建一个不可变的常量/单例值(例如列表)

在scala中的方法内创建一个不可变的常量/单例值(例如列表),scala,code-readability,Scala,Code Readability,希望这不是一个愚蠢的问题-scala有很多我还不知道的语法糖。作为一名开发人员,我正在努力改进,并获得真正易于阅读的代码,这就是我的初衷 是否可以创建一个只声明一次的列表,并将其放在方法体中以保持清晰? 我想这样做,让scala把它放在permgen里,然后把它留在那里,因为它永远不会改变。 是否可以这样做,或者我必须在类主体中声明它 乙二醇 编辑:我在胡乱猜测它是“最终的”,我现在正在查看。语义要求每次调用方法时对列表(“1”,“1”)进行一次评估,以防调用有副作用 抱歉,没有修改器允许您更改

希望这不是一个愚蠢的问题-scala有很多我还不知道的语法糖。作为一名开发人员,我正在努力改进,并获得真正易于阅读的代码,这就是我的初衷

是否可以创建一个只声明一次的列表,并将其放在方法体中以保持清晰? 我想这样做,让scala把它放在permgen里,然后把它留在那里,因为它永远不会改变。 是否可以这样做,或者我必须在类主体中声明它

乙二醇


编辑:我在胡乱猜测它是“最终的”,我现在正在查看。

语义要求每次调用
方法时对
列表(“1”,“1”)
进行一次评估,以防调用有副作用

抱歉,没有修改器允许您更改该行为。如果您确实不想在封闭类中声明
list
,可以执行以下操作:

class X {
  object MethodHolder {
    val list = List("1", "1")
    def method(param: ???) = ...
  }
  import MethodHolder.method


  // rest of class
}

注意:不允许对函数变量使用
final
关键字。在Scala中,
final
只防止重写(请参见答案)。

谢谢。我想我会试试。我觉得我的设计有问题
class X {
  object MethodHolder {
    val list = List("1", "1")
    def method(param: ???) = ...
  }
  import MethodHolder.method


  // rest of class
}