ruby陷阱,欢迎补充


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。

你可能感兴趣的:(.net,Ruby,Rails)