ruby中不同变量作用域之间的差异
Ruby有5个变量作用域:ruby中不同变量作用域之间的差异,ruby,scope,Ruby,Scope,Ruby有5个变量作用域: 局部变量:这些是正常变量,例如x=25,y=gaurish,其中x和y是局部变量 实例变量:这些变量在实际变量名称前面用@符号表示。主要与类一起使用,因此类的每个实例/对象都有不同的/单独的值。例如@employee.name='Alex' 类变量:在变量名称前面用@符号表示。类变量,我认为所有实例/对象的值都相同 全局变量:它们以$符号开头,可以在任何地方访问。示例$LOAD\u路径 常量:必须以大写字母开头,但必须按惯例使用所有大写字母书写。虽然它是一个常量,但它
x=25
,y=gaurish
,其中x
和y
是局部变量@
符号表示。主要与类一起使用,因此类的每个实例/对象都有不同的/单独的值。例如@employee.name='Alex'
@
符号表示。类变量,我认为所有实例/对象的值都相同$
符号开头,可以在任何地方访问。示例$LOAD\u路径
所有大写字母
书写。虽然它是一个常量,但它的值不是常量,可以更改(不过ruby会抛出一个警告)。所以在这个意义上,这也像一个变量李>
您可能会注意到,上面所有的变量都存储了某种类型的值,并且它们的值可以更改。但是,每个作用域都有一些不同之处。拥有5种不同类型的变量作用域让我非常困惑。主要是,我很难决定在什么情况下,我应该在代码中使用特定的作用域。所以我脑子里有一些问题。请回答:
Global$x
变量。ruby中的全局变量也被认为是邪恶的,因此不应该使用。或者,在某些特定情况下,在ruby中使用全局变量是有意义的public
这样的事实上的选择?在大多数用例中,哪一个是安全的赌注感谢您花时间阅读和回答问题局部变量并不等同于类变量,它们与您所在的块有关。块中声明的任何局部变量都可以在那里使用。类变量与所处的类结构相关联。定义一个类本身就是一个块,因此您可以类似地访问局部变量,但是您会发现,如果在不同的上下文中引用类,则无法以相同的方式引用局部变量 全局变量如果被滥用,则被视为不良形式。OOP应该可以帮助您构造程序,这样就不需要整个程序上的常量。把它们想象成是全球性的:如果你不能保证它与整个世界的一致性,比如圆周率的价值,或者你是否爱你的妻子,你可能不应该做出承诺 一旦你掌握了窍门,我发现“”是一个很好的参考
public
并不是事实上的选择——它取决于所讨论的实体。默认Java作用域是包私有的(方法、属性)。在Ruby中使用哪一个完全取决于用例,注意到与Java一样,甚至在Ruby中更容易,事情可以避免在下面的链接中,我找到了一个关于Ruby中不同作用域及其可见性的很好的深入解释 据报道,
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.
关于实例变量的更多解释是:您可以访问该特定类的任何方法中的实例变量。而局部变量不能在方法之外访问。下面是ruby monk的一个例子
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