`

ruby的“或等于”操作符

    博客分类:
  • ruby
 
阅读更多
google或者baidu ruby的“或等于”赋值运算符的时候,经常会看到这样的说明

比如下面这个很典型
http://gcxieblog.blog.163.com/blog/static/5683783920091711639887/
引用
问题:如果你想为一个变量赋值,当且仅当它是空值nil的时候(如果不是nil,则不改变它原来的数值),你该怎么操作?

我的想法:使用 (||=)
如下:
@test||=0  (当@test是空值时赋值为0)


那么这种说法对吗?

# 当a变量不是空值的时候
2.0.0-p195 :004 > a = 3
 => 3 
2.0.0-p195 :005 > a ||= 5
 => 3 
2.0.0-p195 :006 > a
 => 3 
# 当a 是空值的时候
2.0.0-p195 :007 > a = nil
 => nil 
2.0.0-p195 :008 > a ||= 5
 => 5 
2.0.0-p195 :009 > a
 => 5 


从上面的例子来看确实是没问题
但是再看下面:
2.0.0-p195 :001 > a = false;
2.0.0-p195 :002 >   a ||= true
 => true 
2.0.0-p195 :003 > a
 => true 


这个时候a是false不是nil空值啊,但是为什么 ||= 运算符会把这个true值赋给a呢?
因为 ||= 仅仅是一种“或操作并且赋值”的简写:
x = x || y  
# 等价于  
x ||= y
分享到:
评论

相关推荐

    Ruby中对一元操作符重载实例

    今天我们要探讨一下Ruby中的一元操作符重载。 一元操作符有:+ – * ! & 等,为了避免与数值的 + – 混淆,重载一元操作符,要在后面加上一个 @ 操作符。 1. 一个简单的一元操作符重载例子:-@ 操作符 我们以String...

    Ruby编程语言pdf

    在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...

    Ruby程序设计语言 (涵盖Ruby 1.8和1.9)源代码

    《Ruby程序设计语言》是Ruby的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次... 表达式和操作符  语句和控制结构  Method、proc、lambda和closure  类和模块  反射和元编程

    ruby教程.rar

    操作符表达式 控制结构/异常处理 方法调用 类/方法的定义 标准库 内部函数 内部变量 内部常数 内部类/模块/异常类 附加库 Ruby变更记录 ruby 1.6 特性 ruby 1.7 特性 ruby 1.8 特性 1.6.8到1.8.0...

    Ruby编程语言

    在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    Ruby 安装 – Windows.docx

    安装完成后,您可以在命令提示符或PowerShell中运行ruby -v命令来验证Ruby是否成功安装。 安装开发工具包(可选): 如果您希望使用Ruby进行开发,可以考虑安装开发工具包(如DevKit)。DevKit是一个用于在Windows...

    Ruby加减乘除的案例

    以下是使用 Ruby 编写的一个简单的加减乘除案例,它接受用户输入的两个数字和操作符,然后执行相应的运算,并输出结果 这个 Ruby 程序首先提示用户输入两个数字和一个操作符,然后根据用户输入的操作符执行相应的...

    详解Ruby当中的算数运算

     Ruby比较操作符: 假设变量a=10,变量b=20:  Ruby赋值运算符: 假设变量a=10,变量b=20:  Ruby并行赋值: Ruby还支持并行赋值的变量。这使得多个一行Ruby代码来初始化变量。例如: a = 10

    ruby对excel详细操作-读取、统计、写入

    ruby对excel中的数据进行读取,统计进行计算,重新...存在读取excel数据,进行数量统计,分隔符操作,hash函数统计,取几位小数以及百分比。windows电脑可用,无需安装依赖包,直接使用ruby语言安装包解压即可使用。

    ruby 模块

    其一是将相近的方法和实体放在一个相对集中的域里.Ruby标准包里的Math模块就扮演着这一角色: ruby> Math.sqrt(2) 1.41421 ruby> Math::PI 3.14159 ::操作符告诉 Ruby 解释器在哪里找常数的值(可以想像,Math外的...

    em-rubyserial:Ruby宝石的EventMachine功能

    EventMachine串行端口功能应适用于所有*Ruby口味(包括MRI,jruby;以及各种操作系统,包括linux,windows和apple) (*为所有的某些值) 使用以下gem进行串行端口连接: : 基本上复制了这个gem: : 但将...

    matlab代码输入如何换行符-glm-wrangler:Ruby脚本,用于GridLAB-D模型文件的面向对象操作

    您很可能需要编写一些自定义的ruby代码,使其能够执行所需的操作,但是我尝试使此操作尽可能简单。 执照 GLMWrangler是:copyright:2012,作者:Michael A. Cohen。 它在下发布。 要求 GLMWrangler是为ruby 1.9编写的...

    Ruby的面向对象方式编程学习杂记

    Ruby的class关键字更像是一个作用域操作符,而不是类型声明语句。class关键字的核心任务是把你带到类的上下文中,让你可以在里面定义方法。 每个类都是一个模块,类就是带有三个方法(new,allocate,superclass)的...

    nfe_ruby:Ruby语言的NF-e发射器

    e数据:#NF-e标识nf.ide.c_uf = NfeRuby :: CODIGO_UF ['RO']#UF代码nf.ide.c_nf = 1#唯一的NF代码,用于生成访问密钥nf.ide.nat_op =“ SALE”#操作的性质nf.ide.ind_pag = 0#付款指示符(0

    rabbitmq_http_api_client:Ruby的RabbitMQ HTTP API客户端

    获取群集节点状态(已使用#个文件描述符,RAM消耗等) 获取有关交换,队列,绑定的信息 关闭客户端连接 获取有关虚拟主机,用户,权限的信息 获取有关已启用的插件,协议,其端口等的信息 管理虚拟主机,用户,...

    插值超级功率Ruby介绍000

    字符串插值允许我们评估Ruby代码,并将返回值注入字符串的中间。 通常,我们会看到类似以下的内容: name = "Bob"puts "Hello, #{ name } "# => "Hello, Bob" 但是,我们不仅限于注入简单变量。 如果仅将英镑符号/...

    详解Ruby中的代码块对象Proc

    Proc对象 Proc是由块转换来的对象。创建一个Proc共有四种方法,分别是: 示例代码 ...除了上面的四种之外,还有一种通过&操作符的方式,将代码块与Proc对象进行转换。如果需要将某个代码块作为参数传递

    Ruby中的Range对象学习笔记

    Range是范围对象的类,定义的时候可以使用范围操作符“..”或者“…”,“..”生成的范围对象包括起点和终点,“…”生成的范围对象不包括起点和终点,范围是由是一序列有顺序、有规律的元素对象组成,任何有顺序,...

    ruby-scripts

    Ruby脚本介绍在这个项目中,我们将编写一堆小的Ruby程序,这些程序可以执行各种操作。 我们的主要目标是让您有机会提出关于遇到的概念的问题。 希望这些练习还将为您提供有关项目构建内容的一些想法-我们将看到开源...

Global site tag (gtag.js) - Google Analytics