论坛首页 编程语言技术论坛

ruby陷阱,欢迎补充

浏览 2319 次
精华帖 (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。
   发表时间:2007-11-22  
真的要?这里很多:
URL http://www.blogjava.net/Files/cap/ruby_xj.rar
0 请登录后投票
   发表时间:2007-11-23  
before_filter在不同的环境(development和production)的行为好像不同,现在遇到这个问题,进一步调试中,有待验证(如果确认了,这算是Rails的陷阱了)。

原来不是before_filter的错,而是class_inheritable_accessor惹的祸
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics