Ruby有5个可变范围:差异红宝石作用域
- 本地变量:这些是正常的变量,例如
x = 25
,y = gaurish
其中x
和y
是局部变量。 - 实例变量:这些用实际变量名称的
@
符号表示。主要与类一起使用,以便类的每个实例/对象具有不同的/单独的值。例。@employee.name = 'Alex'
- 类别变量:用变量名前面的
@@
符号表示。类变量,我认为具有相同的价值accos所有实例/对象。 - 全局变量:他们开始与
$
符号和可访问到处。示例$LOAD_PATH
- 常量:必须以大写字母开始,但以大写字母
ALL_CAPS
写。虽然,它是一个常量,但它的价值不是恒定的,可以改变(虽然红宝石会发出警告)。所以从某种意义上讲,这也是一个变量。
正如你可能会注意到的,以上所有的变量都存储某种类型的值,并且它们的值可以被改变。但是,每个范围都有一点不同。有5种不同类型的可变范围会让我感到困惑。主要是,我很难决定在什么情况下,我应该在我的代码中使用特定范围。所以我在脑海里有一些问题。请回答:
- 我注意到局部变量和类变量对所有对象/实例保持不变,与实例变量不同。那么局部变量和类变量有什么区别?
- 局部变量可以用来代替类变量吗?或相反亦然。如果是,那么为什么,如果不是,那为什么不呢?
- Ruby中的全局变量让我想起了PHP中的邪恶
global $x
变量。 Ruby中的全局变量也被认为是邪恶的,因此不应该被使用。或者,在某些情况下,在ruby中使用全局变量是有意义的? - 为什么常量不是常量并且允许改变它们的值?定义中的常数值应该是正确的?否则,我们可以使用另一个变量并且不要更改它的值。这会相当于红宝石中的CONSTANT吗?
- 解释ruby中5个不同变量作用域之间区别的任何页面/资源/链接?我喜欢保留一个方便参考。
- 在什么用例下,我应该在我的代码中使用特定的变量作用域。所以可以解释所有5例可能会很酷的例子,这是我混淆的主要原因。
- 在java中是否有像
public
这样的事实选择?在大多数使用情况下,哪个安全下注?
感谢您抽出时间来阅读和回答问题
对于第一点,所有对象共享类级变量,每个单独的对象将有自己的局部变量副本 – 2012-07-15 20:01:12
如果每个单独的对象都有自己的局部变量副本,那么不是局部变量更像是实例变量然后? – CuriousMind 2012-07-15 20:02:53
排序,我想你可以这样看他们。实例变量_属于一个对象的实例,通常构成该对象的属性。例如'Person'对象可能有两个实例变量'@ first_name'和'@ last_name',它也可能有一个局部变量'x',但'x'与'Person'对象的状态无关 – 2012-07-15 20:06:32