Ruby有5个变量范围:
x = 25
,y = gaurish
where x
和y
是局部变量.@
实际变量名称的符号表示.主要用于类,以便类的每个实例/对象具有不同/单独的值.例.@employee.name = 'Alex'
@@
变量名前面的符号表示.类变量,我认为具有相同的值accos所有实例/对象.$
符号开头,随处可访问.例$LOAD_PATH
ALL_CAPS
.虽然,它是一个常数,但它的值不是常数,可以改变(虽然红宝石会发出警告).从某种意义上说,这也像一个变量.正如您可能注意到的,上述所有变量都存储某些类型的值,并且可以更改它们的值.但是,每个范围都会有所不同.拥有5种不同类型的可变范围让我感到困惑.主要是,我很难在什么情况下决定,我应该在我的代码中使用特定的范围.所以我脑子里有些问题.请回答:
global $x
了PHP 中的邪恶变量.红宝石中的全局变量也被视为邪恶,因此不应使用.或者,在特定情况下,在ruby中使用全局变量是有意义的吗?public
在java中有没有事实上的选择?在大多数用例中哪个是安全的赌注?感谢您花时间阅读并回答问题
Dav*_*ton 13
类变量对于所有实例都是相同的,因为它们是与类关联的类变量.一切都访问相同的变量,包括每个实例.
不,局部变量就是本地变量.它们可以是函数的本地函数,也可以是类声明的本地函数,它与类变量不同.类声明结束时,类声明中的本地超出范围.
那是因为他们完全一样 - 他们是全球性的.全球国家总是邪恶的; 这不是语言或环境的属性.也就是说,可能需要一些全球状态 - 这就是它的方式.当有全局状态时使用全局状态是有意义的.诀窍是正确使用全球状态,这有时是一项非平凡的努力.
这就是Ruby的方式.
克里斯已经给了一个.
我认为这个问题在很大程度上是自我回答的.当整个世界需要访问时全球化.实例,当它特定于类实例时.本地只在本地范围内需要时(例如,方法,块(注意块与范围之间的差异在1.8和1.9之间)等)变量不应该改变时的常量.一个类变量,它是每个实例都需要的东西,或者是通过类方法公开的东西,与类紧密相关的东西.
没有"大多数用例",它完全取决于你对变量做了什么.而且public
是不是在事实上选择Java的这取决于所涉及的实体.默认Java范围是package-private(方法,属性).在Ruby中使用哪个完全取决于用例,注意到与Java一样,甚至更容易在Ruby中,事情可以被规避.
局部变量不等于类1,它们与您所在的块相关联.块中声明的任何局部都可以在那里使用.类变量与您所在的类结构相关联.定义类本身就是一个块,因此您可以类似地访问局部变量,但是如果您在不同的上下文中引用您的类,则无法引用本地变量以相同的方式.
如果被滥用,全局变量被认为是不良形式.OOP应该帮助您构建程序,以便不需要整个程序的常量.把它们想象成实际上是全球化的:如果你不能保证它与整个世界的一致性,比如PI的价值或者你是否爱你的妻子,你可能不应该做出承诺.
一旦掌握了它们,我发现" Ruby Variable Scope "是一个很好的参考.
归档时间: |
|
查看次数: |
14154 次 |
最近记录: |