新手问题 self.object_id.to_s

xiaoronglv · 2012年07月08日 · 最后由 xiaoronglv 回复于 2012年07月09日 · 2569 次阅读

我就是新手中的战斗机,每天一个菜问题。

问题来源:《web 敏捷开发 第三版》115 页,创建一个 salt 值。

def create_new_salt
self.salt = self.objectt_id.to_s + rand.to_s
end
  1. rand 是个无参的方法,rand.to_s 将随机的数值转化为 string

  2. self.object_id.to_s 是什么意思呢?id 是对象的属性啊,个人感觉应该用实例方法来访问对象的属性,为什么要用类方法?

求赐教。

新手回答: 因为所有的类其实都是 Class 类的实例。

self 就是调用实例本身,本来就是实例的属性。对象和实例在一定程度上是一个意思,是动态生成的。

亲,self 一定是类吗?self 是看传进来的对象和作用域的

#3 楼 @Anleb @bony @yesmeck

请问各位,此段代码是不是在实例方法中调用类方法? 😄

#4 楼 @xiaoronglv 不是了,你误解 self 的意思了,self 表示当揃的方法接收者而已. 这个 salt 前面的 self 必须要,但 object_id 前面的不是必须的, 所以写成 self.salt = object_id.to_s + rand.to_s 应该木有问题。

#4 楼 @xiaoronglv 完全不是,你的 self 是你的对象,因为你的这个方法是一个实例方法,所以传进来的所有都是 对象实例,并不是类本身。建议你看看 元编程

#6 楼 @Anleb 今天晚上又重新看了 self

原来 self 在实例方法中:指对象 在类方法中:指类 在 module 中:指 module

感谢各位。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号