论坛首页 入门技术论坛

Ruby中!!的妙用

浏览 1476 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-12-09   最后修改:2009-12-10

!!true和!!false,加上!!似乎有点多余,但是在!!nil时就不同了,返回的结果为false。

 

  # 判断用户是否登录
  def logged_in?
    !!current_login_space
  end

  # 取出当前登录用户
  def current_login_space
    @current_space = Space.find(cookies[:space_id])
  end

 

如果用户未登录,则current_login_space返回的值就为nil,如果将这个空值当做fasle赋值给其他变量,则有可能出现莫名其妙的问题,这时候加上!!后,nil就变为了false,避免了可能出现的潜在问题。

   发表时间:2009-12-09  
jsntghf 写道
  def current_login_space
    @current_space = Space.find(cookies[:space_id])
    return @current_space if @current_space
  end

楼主大大可否讲解一下为什么current_login_space最后要写成这个形式?跟这样写的区别和优点是什么:
  def current_login_space
    @current_space = Space.find(cookies[:space_id])
  end
0 请登录后投票
   发表时间:2009-12-10   最后修改:2009-12-10
ravenex 写道
jsntghf 写道
  def current_login_space
    @current_space = Space.find(cookies[:space_id])
    return @current_space if @current_space
  end

楼主大大可否讲解一下为什么current_login_space最后要写成这个形式?跟这样写的区别和优点是什么:
  def current_login_space
    @current_space = Space.find(cookies[:space_id])
  end

后一句完全是画蛇添足, Space.find(cookies[:space_id])这一句要么找到结果返回一个Space实例,要么就抛异常,后面的代码根本不会执行。

还有那个!!也是完全没有必要的。ruby中nil的地位完全高于false,强制返回false不会带来任何好处。除非你的代码里有这样写:
if xx==false
0 请登录后投票
   发表时间:2009-12-10  
Hooopo 写道
ravenex 写道
jsntghf 写道
  def current_login_space
    @current_space = Space.find(cookies[:space_id])
    return @current_space if @current_space
  end

楼主大大可否讲解一下为什么current_login_space最后要写成这个形式?跟这样写的区别和优点是什么:
  def current_login_space
    @current_space = Space.find(cookies[:space_id])
  end

后一句完全是画蛇添足, Space.find(cookies[:space_id])这一句要么找到结果返回一个Space实例,要么就抛异常,后面的代码根本不会执行。

还有那个!!也是完全没有必要的。ruby中nil的地位完全高于false,强制返回false不会带来任何好处。除非你的代码里有这样写:
if xx==false


照也,越平实越大路才是功夫哈
0 请登录后投票
论坛首页 入门技术版

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