《Ruby for Rails 中文版》071013

 

第七章 默认对象和作用域<o:p></o:p>

self在程序执行过程中不断改变。任一时刻只有一个对象扮演self的角色。
为了知道哪个对象是self,需要知道当前的上下文。有顶层上下文、类定义块、模块定义块、模型定义块和方法定义块上下文。self由当前的上下文所决定。<o:p></o:p>

术语顶层指的是在任何类或模块定义块之外的程序代码。如果打开一个新的文本文件并键入
x=1
就产生了一个顶层局部变量x。如果键入

def m
end
就产生了一个顶层方法。
在没有进入任何定义块之前,selfmain<o:p></o:p>

在类或模块定义中,self是类对象或模块对象。<o:p></o:p>

在定义块内部中的裸词XXXself.XXX的简化形式。当在回到类定义块的外面,为了调用XXX,需要指明接收者<o:p></o:p>

实例变量和self
实例变量属于包含该实例变量的代码执行时扮演self角色的对象(即当前对象)
class C
def show_var
@v = "I am ..."
puts @v
end
@v = "IN..."
end
c.new.show_var
<o:p></o:p>

全局作用域的优缺点
通过将信息保存在全局变量中,而不是设计必须用方法调用来获取信息的对象,多个类可以共享信息。但是使用全局变量对程序设计没有什么好处,反而最终会市区程序设计的稳固性和灵活性。
$gvar = "I'am.."
class C
def examine_global
puts $gvar
end
end
c = C.new
c.new.examine_global
<o:p></o:p>

局部作用域
每次使用关键字def,class,module引入一个定义时,就开始了一个新的局部作用域。不论它们如何嵌套,都是这样的。
class C
a = 1
def local_a
a = 2
puts a
end
puts a
end
c = C.new
c.local_a
该代码输出如下:
1
2
<o:p></o:p>

常量可定义在类和模块的定义块内。如果了解定义的嵌套关系,则可以从任意位置访问常量:
Moudle M
Class C
Class D
Module N
X = 1
End
End
End
End
Puts M::C::D::N::X<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值