如何以编程方式检查变量是val还是var?

问题描述 投票:0回答:1

在scala中,我们可以像这样定义变量:val a=10var a=10

无论如何,我们可以通过编程方式检查a是val还是var

scala variables definition
1个回答
0
投票

Scala是一种面向对象的语言。特别是,这意味着您只能操作对象。

变量不是Scala中的对象(几乎每种编程语言都一样,因此,例如,您无法调用变量上的方法来询问它是var还是val (因为您只能在对象上调用方法,而变量不是对象),并且无法将变量传递给方法以询问该方法变量是val还是var(因为您只能将对象作为参数传递,而变量不是对象)。

同样,这并非真正针对Scala,这适用于绝大多数编程语言。即使在像Ruby这样的编程语言中,它具有非常强大的动态元编程功能,变量也不是对象,也无法反映。

但是等等,您可能会说,类也不是Scala中的对象,但是我可以使用scala.Predef.classof[T]获得类的运行时表示形式!确实可以,但是类和变量之间存在根本区别:类是runtime实体,因此,即使它们不作为对象存在,它们在运行时至少do << exist >> 。变量是纯compile time构造,它们不存在在运行时。所以,

唯一的方法

您可以使用编译时反射来获得变量全部。无论您要做什么,这很可能完全是矫kill过正。所以,回答您的问题:

无论如何,我们可以通过编程方式检查a是scala.Predef.classof[T]还是val

非常简短的回答

:否

非常简短的答案

:无论如何,您都不应使用var。如果您遵循该建议,那么该问题将变得毫无根据。

简短回答

:如果您的局部变量作用域太大且令人费解,甚至您都无法弄清变量是var还是var,那么您会遇到更大的问题。

简单答案

:编号

更详细的答案

:否,不是在运行时。

非常复杂的答案

:可能可以使用val
© www.soinside.com 2019 - 2024. All rights reserved.