`
jy503160
  • 浏览: 20025 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ruby中||=

    博客分类:
  • ruby
 
阅读更多

 

def current_user
    @current_user ||= session[:user_id] && User.find(session[:user_id])
end

  短短一行代码,却含有很多逻辑,以前老是搞混,这里总结一下。

这句代码相当于

def current_user
    if @current_user
       return @current_user
    else
       if session[:user_id]
          @current_user = User.find(session[:user_id])
       else
          @current_user = nil
       end
       return @current_user
    end
end

 

展开后的代码看起来很恶心,代码意思为:如果@current_user不为空直接返回@current_user。
如果@current_user为空,则根据session中的user_id判断是否登录,如果已经登录则查找出用户信息并返回。如果没有登录则返回空。

这里总结下各符号用法:
and 与 && 为和,区别是and优先级比&&低。
or 与 || 为或,not与!为非,区别均是前者优先级低于后者
&&=, !=, ||=这个比较灵活,以前习惯用Java,可以认为它相当于Java里的+=,-=。
a &&= b即为a = a && b。可见Ruby比Java灵活很多。

Ruby的&&, ||与其它语言有些不同。
&&运算法则为:左边为false或nil时,直接分别返回false或nil,右边将不会运算。
左边不为false或nil时,返回右边的对象。
||运算法则为:左边为false或nil时,返回右边的对象。
左边不为false或nil时,直接返回左边的对象,右边的不会运算。
我整理了几个例子:

puts false && "abc"      # => false
puts nil   && "abc"      # => nil

puts true  && "abc"      # => "abc"
puts "123" && "abc"      # => "abc"

puts false || "abc"      # => "abc"
puts nil   || "abc"      # => "abc"

puts true  || "abc"      # => true
puts "123" || "abc"      # => "123"

 

===============如果你想深入请看下面,不深入就算了===============
其实||=这个运算符里面比较复杂,或者说有点乱。

x ||= y
#相当于
x || x=y
#而不是
x = x||y
#区别在于如果x存在且不为空时不会执行任何操作,直接返回。
#还相当于
if defined? x
    x || x=y
else
    x = y
end

 

分享到:
评论

相关推荐

    ruby安装包下载 | ruby环境搭建

    为了在没有外网连接的环境中搭建Ruby环境,你需要提前下载并准备相关的安装包。在提供的压缩包中,包含了三个关键文件:`ruby-2.7.2.tar.gz`、`redis-6.0.9.tar.gz` 和 `rubygems-3.1.5.tgz`。接下来,我们将详细...

    pusher-http-ruby, Pusher | owner=@vivangkumar的ruby 服务器库.zip

    pusher-http-ruby, Pusher | owner=@vivangkumar的ruby 服务器库 推 gem 安装&配置将推送器添加到你的Gemfile,然后运行 bundle installgem 'pusher'或者通过 gem 安装gem install pusher在 http://p

    安装rvm,把ruby版本提升至3.0.0

    在IT行业中,管理和切换Ruby版本是一项常见的任务,特别是在开发环境中,不同的项目可能依赖于不同版本的Ruby。`RVM`(Ruby Version Manager)是解决这一问题的利器,它允许开发者在多个Ruby版本之间轻松切换。本文...

    Ruby入门教程中文PDF 附实例

    Ruby中的控制结构也相当直观。`if`语句用于条件判断,`for`和`while`循环用于迭代。例如,下面的代码会打印1到5的数字: ```ruby for i in 1..5 puts i end ``` Ruby还是一个面向对象的语言,每个值都是一个对象,...

    ruby_version:Ruby版 | 比RUBY_VERSION好

    Ruby 版本 提供RubyVersion以简化在程序中检查正确 Ruby 版本的过程。安装 在您的命令行上: $ gem install ruby_version 在Ruby中: require 'ruby_version'用法 # Output RUBY_VERSIONRubyVersion . to_s# Check ...

    ruby的惯用法的使用

    在实际开发过程中,为了提高代码的可读性和可维护性,Ruby社区形成了一系列约定俗成的惯用法(idioms),这些惯用法可以帮助开发者更高效地编写Ruby程序。 #### 二、循环控制 **1. 数字范围循环** - **传统写法**: ...

    Ruby元编程第二版中文

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

    ruby 中文 教程 从入门到精通

    - **关键字**:Ruby中有多种关键字用于控制流和定义程序结构,例如`if`、`else`、`elsif`、`while`、`for`等。 - **运算符**:包括算术运算符(+、-、*、/)、比较运算符(==、!=、<、>)和逻辑运算符(&&、||、!)...

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby中文帮助文档

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

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

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

    Ruby-rubybuild编译和安装Ruby

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

    ruby-使用ruby实现的排序算法-sorting.zip

    在Ruby编程语言中,排序算法是数据处理和分析的核心部分,它们用于组织和优化数据结构。本资源"ruby-使用ruby实现的排序算法-sorting.zip"聚焦于如何使用Ruby实现不同的排序算法,这对于Ruby开发者来说是一项重要的...

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

    Ruby中的变量不需要声明类型,它们的类型由赋值决定。变量分为局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)和全局变量(以`$`开头)。 控制流程是编程中的关键部分。Ruby提供了条件语句(如`if`和`...

    Ruby Data-Processing ruby数据处理

    Map、Reduce和Select是Ruby中用于操作和处理数据的关键概念,它们在数据科学、分析和软件工程领域中扮演着重要角色。 1. **Ruby Map**: Map函数允许我们将一个操作应用到数组或集合中的每一个元素上,然后返回一个...

    Ruby 基础语法 视频教程1

    通过`ruby-4-variables.mp4`和`ruby-5-variables-rules.mp4`,你可以深入理解变量的用法和规则,而`ruby-6-expression.mp4`将帮助你掌握如何在Ruby中构建和使用表达式。这些视频教程将为你提供一个坚实的Ruby编程...

    ruby 目录操作详细介绍

    在Ruby编程语言中,对目录的操作是至关重要的,特别是在处理文件系统时。下面将详细介绍如何在Ruby中进行目录的创建、删除、查询、修改以及读取文件等操作。 1. 创建文件夹 Ruby提供了多种创建文件夹的方法。例如,...

    Ruby-Ruby的面向对象的枚举

    在Ruby编程语言中,"面向对象的枚举"是一个重要的概念,它结合了面向对象编程的灵活性和枚举类型的效率。Ruby的枚举通常指的是枚举类(Enum Class),这是一种自定义枚举类型的方法,允许我们创建具有特定行为的枚举...

    ruby基础教程(中文第四版).epub

    握Ruby, 找到属于自己的快乐编程方式, 做到融会贯通并灵活运用到实际工作中。 本书适合Ruby初学者学习参考, 有一定Ruby编程基础的读者若想再回顾一下Ruby的各知识点, 本书也能提供不少帮助。

Global site tag (gtag.js) - Google Analytics