现在的位置: 首页 > 综合 > 正文

rails编码规约之ActiveRecord对象中self用法

2013年10月17日 ⁄ 综合 ⁄ 共 2335字 ⁄ 字号 评论关闭

用ruby的朋友都知道,给方法传参数的时候可以不用括号。

ex:

 

ruby中定义类似java中的get/set方法这样写

 

这样问题就产生了,

如果我在一个方法中像下面这样写,

那么这是在调用一个方法呢?还是给一个局部变量赋值?

 

肯定的告诉你,这是一个局部变量的赋值。

要想调用name=方法的话,加上self

 

 

rails中是这样规定的

1 在赋值的时候

如果不使用self,类似name = xxx,被认为局部变量声明

使用self,比如self.name = xxx,被认为是调用name=方法

 

2 在取值的时候

如果不使用self,那么 name ,被认为是访问局部变量,如果找不到这个名字的局部变量,依然去调用这个名字对应的方法

如果使用self,那么 self.name是调用name方法

 

有rails源码为证(ActiveRcord::Base中的attributes和attributes=方法,别说你没用过。。。)

 

这里的#8,#9,#11,#12等行的attributes都是局部变量。

再看另一个方法

 

#10行,第一个self.attributes是调用了attributes=方法,

第二个attributes则是局部变量

 

 

 

 

 

 

 

 

所以在rails的模型类中,可以省略self的地方尽量省略来写,

只有在调用方法的时候才使用self.xxx 。。。

这样使得模型类看起来方便些,不会满眼都是self。

 

原文地址:http://blog.csdn.net/zhao_hongsheng/archive/2011/05/12/6415686.aspx

 

 

 

抱歉!评论已关闭.