Ruby 表达式和操作符

这篇文章是关于 Ruby 语法中表达式和操作符的一些值得注意的知识点。

关键字字面量

某些 Ruby 关键字是基本表达式,可以把它们当做关键字字面量来使用。包括,nil、true、false、self、FILELINEENCODING

方法与变量

现在存在一个最简单的表达式:

x

如果存在一个名为 x 的变量(解释器见到了对 x 的赋值操作),那么就会当做成为一个变量的引用表达式。否则,就会被当做是在 self 对象上,对方法 x 的一次不带实参的调用。

常量赋值

对一个已经存在的常量进行赋值,Ruby 会发出一个警告,然而 Ruby 仍会进行这个赋值。在方法体的内部不允许对常量惊醒赋值。Ruby 认为方法可以被多次调用,如果每次调用都发出一个警告,那么干脆就不允许这样做了。

与变量不同,只有在 Ruby 解释器真正执行了常量赋值以后,这个常量才会存在。像下面这个表达式并不会产生一个常量。

N = 100 if false

并行赋值

左值和右值数量相等时最简单:

x, y, z = 1, 2, 3    # x=1, y=2, z=3

一个左值,多个右值时,Ruby 会创建一个数组来容纳所有的右值,同时你可以在左值后边接一个逗号,来表示不希望右值被合并成为一个数组。

x = 1, 2, 3    # x = [1, 2, 3]
x, = 1, 2, 3    # x=1

多个左值,一个数组右值(或是实现了 to_ary 的方法),那么 Ruby 会尝试展开右值。

x, y, x = [1, 2, 3]    # x=1, y=2, z=3

左右值数量不等时,如果左值比右值多,那么每个剩余的左值会被赋值为 nil;如果右值比左值多时,剩余的右值将会全部被抛弃。

如果一个右值以 * 开头,那么意味着它是一个类数组对象(数组、范围、枚举器或者任何实现了 to_splat 方法的对象),则会自动展开该数组。

x, y, z = 1, *[2, 3]    # x=1, y=2, z=3

右值列表可以出现任意多个 * ,但是任何在数组浅放置两个 ** 的都是非法的。

当一个左值前边放置一个 * 时,以为着所有多出来的右值都会被赋给该左值。赋给该左值的值总是一个数组,并且 * 可以出现在左值列表的任意位置。

*x, y = 1, 2, 3    # x = [1, 2], y=3
*x, y = 1, 2    # x=[1], y =3
*x, y = 1    #x=[], y=1

可以在并行赋值的左侧通过小括号来进行“子赋值”,例如:

x, (y, z) = 1, [2, 3]    # x=1, y=2, z=3

所有并行赋值表达式的返回值为所有右值构成的数组(在右值所有的展开操作符展开以后)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 表达式和运算符 程序中最简单的表达式就是,程序中的常量 变量名也是一种简单的表达式 复杂的表达式是由简单的表达式组...
    zhaolion阅读 5,577评论 3 12
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 8,827评论 3 44
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,154评论 1 51
  • 你讨厌过年吗?反正我是比较讨厌的。 小时候家里穷,父母很少给我们姐妹俩买新衣服,所以一到过年看着别人家小朋友穿着新...
    淮滨高中李盼盼阅读 3,627评论 0 1
  • 今天开始想留下什么,那么就留下我每一天最真实的自己可好,我很忙每一天看上去都是这个样子,我想去旅行,可是我又恨不得...
    桐二阅读 1,535评论 0 0

友情链接更多精彩内容