作者:寒时凝结公寓_264 | 来源:互联网 | 2023-05-18 09:38
局部变量:只能在变量定义的相同地方使用。如果转而调用对象的方法,或者调用自己的独立方法,变量是不起作用的,所以她的作用域(scape)被视为局部的,她只在局部代码内出现。E.g.defbasic_m
局部变量:只能在变量定义的相同地方使用。如果转而调用对象的方法,或者调用自己的独立方法,变量是不起作用的,所以她的作用域(scape)被视为局部的,她只在局部代码内出现。
E.g.
def basic_method
x = 50
puts x
end
x = 10
basic_method
puts x
Result:
50
10
全局变量: 她在程序的任何地方都可以使用,包括类和对象中。 , 全局变量很有用, 但在ruby中并不常用。
她于面向对象编程的思想有点出入,因为一旦定义了全局变量代码就可能一依赖于他们。 而面向对象编程有一个很有用的能力,那就是吧逻辑代码块相互隔离。
E.g.
def basic_method
puts $x
end
$x = 10
basic_method
puts $x
Result:
10
10
实例变量: 局部变量被限制于局部作用域,而全局变量有扩大为全局作用域。而对象变量(object variable)的作用域在于当前的对象,可以说很方便简捷, 很符合面向对象的思想。
E.g.
Class Square
def initialize(slide_length)
@slide_length = slide_length
end
def area
@slide_length *@slide_length
end
end
a = Square.new(10)
b = Square.new(6)
puts a.area
puts b.area
Result:
100
36
类变量: 她的作用域在整个类中,而不是处于该类的特定对象中。与对象变量的单个@符号相比,类变量以两个@@符号作为前缀。
对于存储与某类所有对象都相关的信息,她特别有用。
E.g.
class square
def initialize
if defined?(@@number_of_squares)
@@number_of_squares += 1
else
@@number_of_squares =1
end
end
end
由于@@number_of_squares是一个类变量,因此每次创建新对象时她已经存在(除了第一次,不过这正是要检查她是否已经存在的原因,如果不存在,则向其赋予初始值1)
PS: 或者用三木运算符来简化代码。
@@number_of_squares = defined?(@@number_of_squares)?@@number_of_squares+1:1