Ruby 有 5 个变量作用域:
- 局部变量:这些是普通变量,例如
x = 25
,y = gaurish
wherex
和y
是局部变量。 - 实例变量:这些用
@
实际变量名前面的符号表示。主要与类一起使用,以便类的每个实例/对象具有不同/单独的值。例子。@employee.name = 'Alex'
- 类变量:用
@@
变量名前面的符号表示。类变量,我认为所有实例/对象具有相同的值。 - 全局变量:它们以
$
符号开头,随处可访问。例子$LOAD_PATH
- 常量:必须以大写字母开头,但按约定以
ALL_CAPS
. 虽然,它是一个常量,但它的值不是常量,可以更改(不过,ruby 会抛出警告)。所以从某种意义上说,这也像一个变量。
您可能会注意到,以上所有这些都是存储某种类型的值的变量,并且它们的值可以更改。但是,每个范围都有一些不同。拥有 5 种不同类型的变量范围让我很困惑。主要是,我很难决定在什么情况下,我应该在我的代码中使用特定的范围。所以我有一些疑问。请回答:
- 我注意到,与实例变量不同,所有对象/实例的局部变量和类变量都保持不变。那么局部变量和类变量有什么区别呢?
- 可以使用局部变量代替类变量吗?或相反亦然。如果是,那为什么,如果不是,那为什么不呢?
- ruby 中的全局变量让我想起了
global $x
PHP 中的邪恶变量。ruby 中的全局变量是否也被认为是邪恶的,因此不应使用。或者,在某些特定情况下,在 ruby 中使用全局变量是有意义的? - 为什么常量不是常量并允许更改它们的值?根据定义,常量的值应该是常量,对吗?否则,我们可以只使用另一个变量而不改变它的值。这是否等同于红宝石中的常数?
- 任何解释 ruby 中 5 个不同变量范围之间差异的页面/资源/链接?我喜欢保留一个方便参考。
- 在什么用例下,我应该在我的代码中使用特定的变量范围。因此,可以用很酷的示例来解释所有 5 种情况,这是我感到困惑的主要原因。
public
有没有像java那样的事实上的选择?在大多数用例中,哪个是安全的选择?
感谢您花时间阅读和回答问题