Ruby 有 5 个变量作用域:
-
局部变量:这些是正常变量,例如
x = 25
, y = gaurish
where x
and y
是局部变量。
-
实例变量:这些用
@
实际变量名前面的符号。主要与类一起使用,以便类的每个实例/对象都有不同/单独的值。例子。@employee.name = 'Alex'
-
类变量: 表示为
@@
变量名前面的符号。类变量,我认为所有实例/对象都具有相同的值。
-
全局变量:他们开始于
$
符号并且可以访问到处。例子$LOAD_PATH
-
常数:必须以大写字母开头,但按照惯例书写为
ALL_CAPS
。虽然它是一个常量,但它的值不是常量并且可以更改(尽管 ruby 会抛出警告)。所以从某种意义上说,这也像一个变量。
正如您可能注意到的,以上所有都是存储某种类型的值的变量,并且它们的值可以更改。但是,每个范围的作用略有不同。有 5 种不同类型的变量作用域让我很困惑。主要是,我很难决定在什么情况下应该在代码中使用特定的范围。所以我心里有一些疑问。请回答:
- 我注意到,与实例变量不同,局部变量和类变量对于所有对象/实例都保持相同。那么局部变量和类变量有什么区别呢?
- 可以使用局部变量代替类变量吗?或相反亦然。如果是,那么为什么,如果不是,那么为什么不呢?
- ruby中的全局变量让我想起了万恶
global $x
PHP 中的变量。 ruby 中的全局变量是否也被认为是邪恶的,因此不应使用。或者,在某些特定情况下,在 ruby 中使用全局变量是有意义的?
- 为什么常量不是常量并且允许其值改变?根据定义,常量的值应该是常量,对吧?否则,我们可以只使用另一个变量而不改变它的值。这相当于 ruby 中的 CONSTANT 吗?
- 有任何页面/资源/链接解释了 ruby 中 5 个不同变量范围之间的区别吗?我喜欢随身携带一份以供参考。
- 在什么用例下,我应该在代码中使用特定的变量范围。所以有人会用例子来解释所有 5 个案例,这会很酷,这是我感到困惑的主要原因。
- 有没有像这样的事实上的选择
public
在java中?哪一个是安全的选择most用例?
感谢您抽出时间阅读并回答问题
类变量对于所有实例都是相同的,因为它们是与类相关联的类变量。所有事物都访问相同的变量,包括每个实例。
不,局部变量就是局部变量。它们可能是函数的局部变量,也可能是函数的局部变量类声明,即不同的而不是作为一个类变量。当类声明结束时,类声明中的局部变量将超出范围。
那是因为它们完全相同——它们是全球性的。全局状态是always邪恶的;这不是语言或环境的属性。也就是说,some可能需要全局状态——事情就是这样。当存在全局状态时,使用全局状态是有意义的。诀窍是使用全局状态properly,这有时是一项不平凡的努力。
Ruby 就是这样。
克里斯已经给了一份。
I would think这个问题很大程度上是自我回答的。当全世界都需要访问时,全球性。实例(当它特定于类实例时)。当仅在本地作用域中需要它时(例如,方法、块(注意 1.8 和 1.9 之间关于块作用域的差异)等),当变量不应该更改时为常量。类变量,当它是每个实例都需要的东西,或者如果通过类方法公开,则与类紧密相关的东西。
没有“大多数用例”,它完全取决于您对变量所做的事情。和public
不是 Java 中事实上的选择——它取决于所讨论的实体。默认 Java 作用域是包私有的(方法、属性)。在 Ruby 中使用哪个完全取决于用例,请注意,与 Java 一样,在 Ruby 中甚至更容易,事情可以被规避。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)