Ruby有5米变量的范围:
- 本地变量 :这些是正常的变量,例如
x = 25
, y = gaurish
其中x
和y
是局部变量。 - 实例变量 :这些被标以
@
符号盈的实际变量名。 主要用与类,使得类的每个实例/对象具有不同的/单独的值。 例。 @employee.name = 'Alex'
- 类变量 :与表示
@@
在变量名前的符号。 类变量,我认为有accos所有实例/对象相同的值。 - 全局变量 :他们开始与
$
符号,并访问无处不在 。 例如$LOAD_PATH
- 常量 :必须以大写字母,但以书面形式在会议开始
ALL_CAPS
。 虽然,这是一个常数,但其价值的不恒定,可以改变(红宝石将抛出一个警告,虽然)。 所以在这个意义上,这也就像一个变量。
正如你可能会注意到,以上所有的是存储某种类型的一些价值,其价值是可以改变的变量。 但是,每个范围做一些事情有点不同。 有5种不同类型的变量的作用域是混淆了我的地狱。 主要是,我有困难在什么样的情况下决定,我应该在我的代码使用一个特定的范围。 所以我在我的脑海一些问题。 请回答:
- 我注意到,局部变量和类变量的所有对象/实例留相同,不同的实例变量。 所以局部变量和类变量之间有什么区别?
- 可以局部变量代替类变量的使用? 或相反亦然。 如果是,那么为什么,如果没有,那么为什么不呢?
- 在红宝石全局变量让我想起了邪恶的
global $x
在PHP变量。 是全局变量的红宝石也被认为是邪恶的,因此不应使用。 或者,有些情况下是有意义的红宝石使用全局变量具体案件? - 为什么常量不是常数,允许改变了他们的价值? 由定义常量的值应该是恒定的吧? 否则,我们只能用另一个变量,但不改变它的值。 那会是相当于红宝石恒定?
- 任何网页/资源/链接,解释了红宝石5级不同的变量的作用域有什么区别? 我想保持一个方便的参考。
- 在什么样的用例,我应该在我的代码使用特定的变量范围。 这样一个可以解释所有5例即可例子会很酷,这是我对混乱的主要原因。
- 有没有像实际的选择
public
在Java? 这将是在大多数使用情况的安全的赌注?
感谢您抽出时间来阅读和回答问题
局部变量是不等同于阶级的人,他们是绑你是在该块。在一个块中的任何地方宣称可以在那里使用。 类变量是绑类结构你在。定义一个类本身就是一个块,所以你可能能够同样访问本地变量,但如果你是指你的类在不同的环境下,你不能引用,你会发现以同样的方式局部变量。
全局变量被认为是不好的形式,如果被滥用。 OOP应该有助于你的程序,从而不需要对整个程序常量。 把它们当作实际上是全球性:如果你不能为它的一致性担保到整个世界,像PI的值或者你是否不爱你的妻子,你可能不应该作出承诺。
一旦你得到他们的窍门,我觉得“ 红宝石变量的作用域 ”是一个很好的参考。
我发现关于不同的范围和他们在红宝石下面的链接能见度良好和深入的解释。 范围和典型能见度与详细实施例。
根据它,
Class variable (@@a_variable): Available from the class definition and any sub-classes. Not available from anywhere outside.
Instance variable (@a_variable): Available only within a specific object, across all methods in a class instance. Not available directly from class definitions.
Global variable ($a_variable): Available everywhere within your Ruby script.
Local variable (a_variable): It is available only in the particular method or block in ruby script.
关于实例变量一些更多的解释是:您可以在特定类的任何方法访问实例变量。 虽然局部变量不能在方法外部访问。 下面是红宝石和尚它详细地介绍了这个概念的例子。
class Item
def initialize(item_name, quantity)
@item_name = item_name
@quantity = quantity
end
def show
puts @item_name
puts @quantity
supplier = "Acme corp"
puts supplier
end
end
Item.new("tv",1).show
这里供应商可以从表演方法只有在我们example.Just访问试图声明中初始化方法的供应商变量,它打印出来的显示方法的局部变量。 它会给一个错误未定义的变量供应商。
我希望它能帮助。 :)
这里是我的这个两分钱,并编写C ++ / JAVA / C#程序员:
Ruby的本地/ $全局变量有点像C ++ / JAVA / C#的局部/全局变量。
一个Ruby @instance可变它像C ++ / JAVA / C#的成员变量/类属性,其可以是任何成员函数访问/类method.Though红宝石实例不但可以以类,而且到Ruby模块被应用。
一个Ruby @@类变量是等作为C ++ / Java的静态成员变量这是相同的类的所有实例之间共享。