浏览 2319 次
锁定老帖子 主题:ruby陷阱,欢迎补充
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-22
1 局部变量优先级大于方法名 如果定义了和某方法同名的局部变量,要么不这么做,要么在调用方法时加上self module LoginSytem def logged_in_user p 'method logged_in_user' end end class UserController include LoginSytem def login logged_in_user='bad man' logged_in_user#will not call method end end UserController.new.login 毕竟local var 可见范围很有限,所以这个陷阱很少人会跳。下个陷阱就不同了,很多熟悉ruby的人都一一中招。 2 调用以=号结尾的方法,一定要加上self 为了增强可读性,ruby允许以!,?,=结尾的方法名称。其中,以=号结尾的方法,在某些时候会产生陷阱。 module LoginSytem def logged_in_user=(user) #put user to session p 'method logged_in_user' end end class UserController include LoginSytem def login logged_in_user='zhang'#wrong!! end end UserController.new.login 运行后发现,LoginSytem中定义的方法根本没有被调用。 老兄,不要吃惊,这里你必须加上self。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-22
真的要?这里很多:
URL http://www.blogjava.net/Files/cap/ruby_xj.rar |
|
返回顶楼 | |
发表时间:2007-11-23
before_filter在不同的环境(development和production)的行为好像不同,现在遇到这个问题,进一步调试中,有待验证(如果确认了,这算是Rails的陷阱了)。
原来不是before_filter的错,而是class_inheritable_accessor惹的祸 |
|
返回顶楼 | |