在scala中,我们可以像这样定义变量:val a=10
或var a=10
。
无论如何,我们可以通过编程方式检查a是val
还是var
?
Scala是一种面向对象的语言。特别是,这意味着您只能操作对象。
变量不是Scala中的对象(几乎每种编程语言都一样,因此,例如,您无法调用变量上的方法来询问它是var
还是val
(因为您只能在对象上调用方法,而变量不是对象),并且无法将变量传递给方法以询问该方法变量是val
还是var
(因为您只能将对象作为参数传递,而变量不是对象)。
同样,这并非真正针对Scala,这适用于绝大多数编程语言。即使在像Ruby这样的编程语言中,它具有非常强大的动态元编程功能,变量也不是对象,也无法反映。
但是等等,您可能会说,类也不是Scala中的对象,但是我可以使用 唯一的方法scala.Predef.classof[T]
获得类的运行时表示形式!确实可以,但是类和变量之间存在根本区别:类是runtime实体,因此,即使它们不作为对象存在,它们在运行时至少do << exist >> 。变量是纯compile time构造,它们不存在在运行时。所以,
无论如何,我们可以通过编程方式检查a是:否scala.Predef.classof[T]
还是val
?非常简短的回答
非常简短的答案
:无论如何,您都不应使用var
。如果您遵循该建议,那么该问题将变得毫无根据。简短回答
:如果您的局部变量作用域太大且令人费解,甚至您都无法弄清变量是var
还是var
,那么您会遇到更大的问题。简单答案
:编号更详细的答案
:否,不是在运行时。非常复杂的答案
:可能可以使用val
。