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中的一元操作符重载。 一元操作符有:+ – * ! & 等,为了避免与数值的 + – 混淆,重载一元操作符,要在后面加上一个 @ 操作符。 1. 一个简单的一元操作符重载例子:-@ 操作符 我们以String...
在对Ruby进行了简要的综述之后,本书详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。 本书还包含对Ruby平台上...
《Ruby程序设计语言》是Ruby的权威指南,全面涵盖该语言的1.8版和1.9版。本书详尽但并不拘泥于语言规范,既适合首次... 表达式和操作符 语句和控制结构 Method、proc、lambda和closure 类和模块 反射和元编程
10. 重载运算符和方法:Ruby允许程序员对操作符和方法进行重载,以提供更加面向对象的语法糖。例如,通过重载操作符 `,可以使自定义类的实例支持 `push` 方法。 本书作为填补了语言参考手册和编程食谱书之间的空白...
2. **钻石操作符(>>>)**:Ruby 2.1引入了钻石操作符,用于解决多重继承中的方法解析顺序问题。这个符号使得类可以明确指定从哪个父类继承方法,提高了代码的清晰度。 3. **块参数**:这一版本改进了块处理的语法...
如果行的最后一个字符是操作符或逗号,则解析器会继续读取下一行的内容,直到语句结束。 对于RubyGems,Ruby的包管理器,可以通过`gem list --local`命令查看本地已安装的RubyGems列表。RubyGems的使用可以使开发者...
- 方法调用可以使用点操作符或括号,根据上下文自动推断。 4. **类和对象** - Ruby是纯面向对象的语言,一切皆为对象。 - 使用`class`关键字定义类,`initialize`方法作为构造函数。 - 继承使用`操作符,多重...
方法调用可以用点操作符(`.`)或者下划线操作符(`_`),并且支持块(block)和 Proc 对象,这对于迭代和回调非常有用。 4. **控制结构**:Ruby有各种控制结构,包括条件语句(if/else/unless)、循环(for、while、...
安装完成后,可以通过命令提示符或 PowerShell 来验证 Ruby 是否成功安装: ```bash ruby -v ``` 如果安装成功,将显示当前安装的 Ruby 版本信息。 ##### Ruby 命令行选项 Ruby 提供了丰富的命令行选项,这些...
`操作符用于检查某个表达式是否已定义。它可以用来检测变量、方法、`super`调用或`yield`是否存在。例如,`defined? foo`会返回"local-variable"如果foo已被初始化,否则返回`nil`。 最后,双冒号`::`运算符允许...
- **表达式与操作符**:Ruby允许字符串等类型的乘法操作,进一步体现了其对多种数据类型的支持和灵活处理能力。 - **方法与赋值**:Ruby允许定义自定义方法,甚至可以在现有类的基础上添加新方法,支持多重返回值。 ...
5. 验证:安装完毕后,打开命令提示符并输入`ruby -v`,如果输出Ruby的版本信息,说明安装成功。 Ruby 1.8.6 特点: - 兼容性:对Windows系统有良好的支持,解决了许多与操作系统交互的问题。 - 面向对象:Ruby是一...
操作符表达式 控制结构/异常处理 方法调用 类/方法的定义 标准库 内部函数 内部变量 内部常数 内部类/模块/异常类 附加库 Ruby变更记录 ruby 1.6 特性 ruby 1.7 特性 ruby 1.8 特性 1.6.8到1.8.0...
在Windows操作系统上安装Ruby通常需要配置环境变量、安装依赖库和设置路径,过程较为繁琐。为了解决这个问题,"ruby windows一键安装" 提供了一个简便的方法,帮助用户快速在Windows上搭建Ruby开发环境。 Ruby的...
文档中提到,当窗口关闭后,Ruby解释器的提示符(irb>)会重新出现,表明事件循环已经结束。 #### 5. 再次运行示例 文档中提到,如果尝试再次运行相同的代码,则不会看到窗口再次显示。这是因为事件循环只能运行一次...
从上述示例可以看到,使用方括号`[]`操作符能够提取字符串中的子字符串或替换子字符串。 除了处理字符串,Ruby还能处理各种格式的文本数据。比如CSV(逗号分隔值),经常用来存储表格数据,Ruby提供了CSV模块来读取...
5. **Symbol到Proc转换的改进**:在Ruby 2.6.1中,使用`&:`操作符将符号转换为Proc更加高效,这在构建函数式编程模式时尤其有用。 6. **Ruby编译器选项**:这个版本增加了新的编译器选项,如`--enable-jit`(Just-...
例如,字符串对象可以使用`+`操作符进行连接,或者使用`length`方法获取长度。 Ruby的面向对象特性体现在其类和继承机制上。你可以定义自己的类,并通过`class`关键字开始。类可以包含属性(也称为实例变量)和方法...
4. **方法和操作符重载**:Ruby允许自定义方法,甚至可以重载操作符,实现自定义的行为。 5. **模块(Module)**:模块是组织代码的方式,可以实现命名空间、混入(Mix-in)功能,使得代码可复用性增强。 6. **元...
1. **管道操作符(Pipeline Operator)**: 新增了`|>`操作符,允许将函数或方法链更直观地连接起来,降低了代码的复杂性和阅读难度。 2. **块参数解构**: 现在可以在块参数中使用数组或哈希解构,这使得处理多值...