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

lia*_*ang 0 variables scala definition

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

无论如何我们可以检查 a 是 aval还是以var编程方式?

Jör*_*tag 7

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

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

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

但是等等,您可能会说,类也不是 Scala 中的对象,但是我可以使用scala.Predef.classof[T]! 实际上你可以,但有类和变量之间的基本差异:类是运行时实体,因此,即使他们不存在为对象,他们这样做至少存在在运行时。变量是纯编译时构造,它们在运行时不存在

所以,唯一的办法,你可以在一个变量获得在所有使用编译时的反射。对于您想要做的任何事情,这很可能是完全矫枉过正。

所以,回答你的问题:

无论如何我们可以检查 a 是 aval还是以var编程方式?

非常简短的回答:不。

非常简短的回答var无论如何你都不应该使用。如果你遵循这个建议,这个问题就变得没有实际意义了。

简短回答:如果您的局部变量范围如此之大且令人费解,以至于您甚至无法弄清楚变量是 avar还是 a ,val那么您将遇到更大的问题。

简单的回答:不。

稍微详细一点的答案:不,不是在运行时。

非常复杂的答案:使用Compile-Time Reflection可能是可能的。