如何以编程方式检查变量是 val 还是 var?
How to check if a variable is val or var programmatically?
在scala中,我们可以这样定义变量:
val a=10
或 var a=10
.
我们是否可以通过编程方式检查 a 是 val
还是 var
?
Scala 是一种面向对象的语言。这尤其意味着您只能操作对象。
Scala 中的变量不是对象(就像几乎所有编程语言一样),因此您无法调用变量上的方法来询问它是否是 var
或 val
(因为你只能调用对象上的方法,而变量不是对象),并且没有办法将变量传递给方法来询问方法变量是否是 val
或 var
(因为您只能将对象作为参数传递,而变量不是对象)。
同样,这并不是 Scala 特有的,它适用于绝大多数编程语言。即使在像 Ruby 这样具有非常强大的动态元编程功能的编程语言中,变量也不是对象,无法反映。
但是等等,您可能会说,classes 也不是 Scala 中的对象,但我可以使用 scala.Predef.classof[T]
获得 class 的运行时表示!确实可以,但是 classes 和变量之间存在根本区别:classes 是 runtime 实体,因此即使它们不作为对象存在,它们 do 至少 exist 在运行时。变量是纯粹的编译时构造,它们在运行时不存在。
所以,唯一的方法你可以得到一个变量是使用编译时反射。无论您想做什么,这很可能是完全矫枉过正。
所以,回答你的问题:
Is there anyway we can check if a is a val
or var
programmatically?
非常简短的回答:没有。
非常简短的回答:无论如何你都不应该使用var
。如果你听从了那个建议,这个问题就没有实际意义了。
简答:如果您的局部变量作用域太大且令人费解,以至于您甚至无法确定变量是 var
还是 val
你有更大的问题。
简单回答:没有。
稍微详细一点的回答:不,不是在运行时。
非常复杂的答案:可能可以使用 Compile-Time Reflection。
在scala中,我们可以这样定义变量:
val a=10
或 var a=10
.
我们是否可以通过编程方式检查 a 是 val
还是 var
?
Scala 是一种面向对象的语言。这尤其意味着您只能操作对象。
Scala 中的变量不是对象(就像几乎所有编程语言一样),因此您无法调用变量上的方法来询问它是否是 var
或 val
(因为你只能调用对象上的方法,而变量不是对象),并且没有办法将变量传递给方法来询问方法变量是否是 val
或 var
(因为您只能将对象作为参数传递,而变量不是对象)。
同样,这并不是 Scala 特有的,它适用于绝大多数编程语言。即使在像 Ruby 这样具有非常强大的动态元编程功能的编程语言中,变量也不是对象,无法反映。
但是等等,您可能会说,classes 也不是 Scala 中的对象,但我可以使用 scala.Predef.classof[T]
获得 class 的运行时表示!确实可以,但是 classes 和变量之间存在根本区别:classes 是 runtime 实体,因此即使它们不作为对象存在,它们 do 至少 exist 在运行时。变量是纯粹的编译时构造,它们在运行时不存在。
所以,唯一的方法你可以得到一个变量是使用编译时反射。无论您想做什么,这很可能是完全矫枉过正。
所以,回答你的问题:
Is there anyway we can check if a is a
val
orvar
programmatically?
非常简短的回答:没有。
非常简短的回答:无论如何你都不应该使用var
。如果你听从了那个建议,这个问题就没有实际意义了。
简答:如果您的局部变量作用域太大且令人费解,以至于您甚至无法确定变量是 var
还是 val
你有更大的问题。
简单回答:没有。
稍微详细一点的回答:不,不是在运行时。
非常复杂的答案:可能可以使用 Compile-Time Reflection。