`
jy503160
  • 浏览: 18740 次
  • 性别: 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

 

分享到:
评论

相关推荐

    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

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

    有些公司的服务器是不允许链接外网的,导致下载安装资源比较费劲。这里提供了ruby的两个安装包和redis的安装包。下载会快些

    ruby_version:Ruby版 | 比RUBY_VERSION好

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

    ruby中文教程,从基础到深入的让你学习ruby

    ruby中文教程,从基础到深入的让你学习ruby

    ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码

    ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码

    Ruby中文帮助文档

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

    Ruby中文文档

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

    ruby中英文api

    ruby中英文api 适合于初学者。 希望能给大家带来一些帮助

    Ruby中文教程及相关源代码

    Ruby中文教程及相关源代码 Ruby中文教程及相关源代码 Ruby中文教程及相关源代码

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

    Redis安装遇到错误解决方案Error installing redis: redis requires Ruby version >= 2.3.0. 先安装rvm,再把ruby版本提升至2.3.0

    Ruby-HttpClient在Ruby中提供类似libwwwperlLWP的功能

    Http Client - 在Ruby中提供类似libwww-perl(LWP)的功能

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

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

    ruby中文手册 chm

    ruby中文手册 chm 内容挺多的 包含: 1、Ruby用户指南 2、Ruby参考手册 3、RGSS入门教程 4、Programming Ruby的翻译

    zinbei_zero:津北の初期です

    ))~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(( (( )) )) ========= ====== ||\ || ||======== ||========= ====== (( (( / / || || \ || || )) || || )) )) / / || || \ || || )) || |...

    Ruby语言中英文教程.rar

    内含 12 本 Ruby 语言中英文教程资源,本资源下载后解压缩将得到以下图书: Programming Ruby 2nd.pdf Agile Web Development with Rails 2nd ed.pdf Agile Web Development with Rails.pdf Best.of.Ruby.Quiz.pdf O...

    ruby2ruby.zip

    ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby

    ruby教程(中文)

    ruby语言的简体中文教程

    ruby中文文档中心资料

    nb60_trans_old_zh_CN,ruby中文文档中心资料

    ruby DBI ruby DBI ruby DBI

    ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...

    Ruby完全自学手册 下

    希望借助于平易的讲解,让读者在学习的过程中,理解Ruby的编程思想,充分享受编程的乐趣,通过《Ruby完全自学手册》进入Ruby开发的殿堂。同时也希望能够与各位读者分享多年来积累的Ruby程序和网站开发的经验。 ...

Global site tag (gtag.js) - Google Analytics