`
jsntghf
  • 浏览: 2533588 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Ruby中!!的妙用

阅读更多

!!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,避免了可能出现的潜在问题。

分享到:
评论
4 楼 ray_linn 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


照也,越平实越大路才是功夫哈
3 楼 Hooopo 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
2 楼 ravenex 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
1 楼 black_star 2009-12-09  
学习了。。。。。

相关推荐

    Hello, Ruby World!

    - **命令行接口**:Ruby可以通过其内置的功能直接调用系统命令和服务,例如使用`whoami`命令来获取当前用户名。 - **交互式环境**:Ruby提供了IRB(Interactive Ruby Shell)这样的交互式环境,允许开发者在命令行中...

    ruby中英文api

    在Ruby中,API主要体现在类、方法、模块和库的形式上,它们提供了丰富的功能供开发者使用。Ruby的官方API文档详细记录了每种内置类型、类、模块、方法以及它们的使用方式。"ruby中英文api"资料集可能包含了对这些...

    ruby中文资源大全

    松本行弘(Matz)是日本一家开源软件公司的程序员,有15年的编程经验。在工作中,他希望有一种比 Perl 强大,比 Python 更面向对象的语言。...本教程内含多部中文ruby介绍和语法参考能作为初中级学习使用。

    使用ruby解析awdb离线库

    使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库...

    Ruby-qtbindings允许你在Ruby中使用QTGui工具包

    在Ruby中使用QTGui工具包,开发者可以利用Ruby的简洁语法和动态特性,同时享受到QT提供的强大GUI设计能力。通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而...

    Ruby入门教程中文PDF 附实例

    此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] fruits.each { |fruit| puts fruit } ``` 元编程是Ruby的另一个强大特性...

    Ruby中文帮助文档

    Ruby中文文档.CHM 方便ruby or rails学习.

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby语言中文教程

    ruby语言入门资料,适合初学者学习ruby使用!非常棒的材料

    Ruby元编程第二版中文

    Ruby元编程是编程领域中一个深入且强大的主题,它允许程序员在运行时修改或创建代码,极大地提高了灵活性和代码的动态性。这本书“Ruby元编程第二版”专注于讲解Ruby语言的这一独特特性,旨在帮助开发者更好地理解和...

    Ruby新手学习书(Ruby语言中文教程)和Rails_4_days

    3. **函数与方法**:了解如何定义和调用函数,以及Ruby中的块、 Proc 和 Lambda 的使用。 4. **面向对象编程**:Ruby是一种纯面向对象的语言,你将学习类、对象、继承、模块、封装和多态等核心概念。 5. **异常...

    ruby 中文 教程 从入门到精通

    - **分隔符**:Ruby中的语句分隔符通常是换行符,但在某些情况下也可以使用分号`;`作为分隔符。 - **关键字**:Ruby中有多种关键字用于控制流和定义程序结构,例如`if`、`else`、`elsif`、`while`、`for`等。 - **...

    Ruby中文文档

    Ruby是一种功能强大的面向对象的脚本语言,她可以使您方便快捷地进行面向对象编程.Ruby使文本处理和系统管理变得简单,与Perl非常相似.一句话:简单明了,扩展性强,移植性好. Ruby的几大亮点: 语法简单 垃圾回收 ...

    ruby语言帮助文档(简体中文)

    9. **异常处理**:Ruby使用`begin/rescue/ensure/else`来处理程序中的错误和异常。`rescue`用于捕获并处理异常,`ensure`保证无论是否发生异常,某些代码都会被执行。 10. **并发编程**:Ruby支持线程和进程,但...

    ruby语法基础教程及Ruby教程中文版和安装文件

    本教程将深入探讨Ruby的基础语法,并介绍如何下载、安装Ruby,以及使用Ruby教程中文版进行学习。 首先,让我们从Ruby的基础语法开始。Ruby支持多种数据类型,包括整数(Integer)、浮点数(Float)、字符串(String...

    pru, Pipeable ruby 忘记 grep/sed/awk/wc. 使用纯,可以读的ruby !.zip

    pru, Pipeable ruby 忘记 grep/sed/awk/wc. 使用纯,可以读的ruby ! Pipeable ruby - 忘记 grep/sed/awk/wc 。 使用纯。可以读的ruby !地图- 每行# count letters of each linels -1 | pru size# sele

    Ruby-TensorStream用Ruby重新实现TensorFlow

    **Ruby-TensorStream:用Ruby重现实现TensorFlow** Ruby-TensorStream是一个开源项目,旨在为Ruby开发者提供一个类似于Google TensorFlow的深度学习框架。它的核心目标是让Ruby程序员能够利用TensorFlow的强大功能...

    Ruby-rubybuild编译和安装Ruby

    在Ruby开发中,为了管理不同版本的Ruby环境,我们常常会使用到`rbenv`和`ruby-build`这两个工具。本文将详细介绍如何使用`ruby-build`来编译和安装Ruby。 `rbenv`是一个用于管理全局或用户级别的Ruby版本的工具,它...

    03Ruby 注释.docx

    Ruby中的注释主要用于记录代码的功能、逻辑或用途,对于未来的维护和调试工作来说,这些注释都是极其宝贵的资料。 #### 三、Ruby 单行注释 在Ruby中,单行注释是以`#`字符开始,直到该行结束的所有内容都会被视为...

    ruby教程(中文)

    ruby语言的简体中文教程

Global site tag (gtag.js) - Google Analytics