局部变量、全局变量、对象变量、类变量

局部变量 :只能在变量定义的相同地方使用。如果转而调用对象的方法,或者调用自己的独立方法,变量是不起作用的,所以她的作用域(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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值