`
wlo_o
  • 浏览: 50483 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

[Ruby 学习笔记] 5. 基本表达式

    博客分类:
  • ruby
阅读更多

1. 基本表达式

没啥好说的~~~~~ 唯一要注意的就是 Ruby 不支持自加(++)和自减(--),可以使用 += 和 -= 代替。

1 + 2
a = 3
a += 4

2. 命令展开

在 Ruby 中,我们可以直接用反引号(`)执行系统命令。其实只是执行了 Kernel.`() 方法,不过把这个当作表达式,感觉有点古怪。
puts `ver`

输出:
Microsoft Windows XP [版本 5.1.2600]

当然,我们可以重载这个方法。
def `(cmd)
  "Command:#{cmd}\n" + Kernel.`(cmd) 
end

puts `ver`

3. 赋值

基本赋值语句
a = b = c = 1       # a = 1, b = 1, c = 1
a = (b = 1 + 2) + 3        # a = 6, b = 3

并行赋值语句 (看下面的代码,估计会有点晕~~~~)
a = 1
b = 2
a, b = b, a
puts a, b

输出:
2
1

其实很简单,接着看下面的规则。

(1) 在赋值操作之前,首先按顺序计算右边的值,并将其保存到数组中。
x = 0
a, b, c = x, (x += 1), (x += 2)
puts a, b, c

输出:
0
1
3

(2) 当赋值语句多于一个左值时,表达式将返回由右值组成的数组。

(3) 如果赋值语句的左值多于右值,多于左值被忽略。
a, b, c = 0, 1
puts a, b, c

输出:
0
1
nil

(4) 如果右值多于左值,额外的右值被忽略。

(5) 如果仅有一个左值而有多个右值,则左值直接被赋值为数组。
a = 0, 1
puts a.class
puts a

输出:
Array
0
1

(6) 如果最后一个左值有一个 "*" 前缀,则多余的右值以数组方式赋值给该变量。
a, b, *c = 1, 2, 3, 4, 5
puts a
puts b
puts "------------"
puts c

输出:
1
2
------------
3
4
5

还有几种复杂点的。
a = [1, 2, 3, 4, 5]

b, c = 99, a         # b=99, c=[1,2,3,4,5]
b, *c = 99, a        # b=99, c=[[1,2,3,4,5]]
b, c = 99, *a        # b=99, c=1
b, *c = 99, *a      # b=99, c=[1,2,3,4,5]

还有一种嵌套赋值语句。
a, (b, c), d = 1, 2, 3, 4
puts a, b, c, d

输出:
1
2
nil
3

看不明白?很简单,括号内的变量在第一次赋值操作时被当作一个变量处理,根据并行赋值规则,自然只有一个 "2" 了。然后对括号内的变量进行第二轮赋值,自然 c = nil 。
a, (b, c), d = 1, [2, 3], 4
puts a, b, c, d

输出:
1
2
3
4
a, (b, *c), d = 1, [2, 3, 100], 4
puts b, "----", c

输出:
2
----
3
100

4. 布尔表达式

Ruby 对 "真" 的定义很简单:任何不是 nil 或者 false 的值都是 true,所以下面的演示中,尽管 line 的值是字符串,依然可以完成整个循环。
while line = gets
    puts line
end

Ruby 的布尔判断采取 "短路求解"(当第一个操作书符合或不符合时,放弃后续判断),同时定义了新的操作符 "defined?" 来判断参数是否已经被定义。
puts defined?(a)

a = 1
puts defined?(a)

输出:
nil
local-variable

如果参数未定义,defined? 返回 nil,否则返回一个标记字符串。

和我们所习惯的布尔表达式不同的是,Ruby 操作符 &&、and、||、or 返回首个决定条件真伪参数值,而不是 true 或 false。
puts "a" && "b" # a 为真,所以决定表达式真伪的是 b,返回 b。
puts nil && "b" # nil 导致短路求解,故返回 nil。
puts "a" || "b" # 同样是短路求解,返回 a。

分享到:
评论

相关推荐

    个人ruby学习笔记

    从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、...以上总结了Ruby的一些基础知识点,这些内容对于初学者掌握Ruby编程语言至关重要,同时也是进一步深入学习的基石。

    ruby学习笔记

    根据提供的“ruby学习笔记”内容,我们可以从中提炼出多个重要的Ruby编程知识点,这些知识点对于初学者来说非常有用。下面将对这些知识点进行详细的解释与扩展。 ### 一、Ruby中的全局变量 Ruby提供了多个特殊变量...

    Ruby自学笔记

    以上是Ruby自学笔记中提及的关键知识点的详细解读,如果要学好Ruby语言,深入理解这些基础知识是非常必要的。Ruby语言的这些特性与规则构成了其独特的编程范式,使得它在动态语言领域中占有一席之地。

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    Ruby知识点笔记

    区间有两种形式:闭区间(1..5)和半开区间(1...5)。 赋值在Ruby中使用"="操作符,可以进行多重赋值、链式赋值以及解构赋值。条件判断语句有`if`、`unless`、多行`if`语句和`case`语句,其中`if`和`unless`分别表示...

    ruby笔记3ruby笔记3ruby笔记3

    最后,Ruby的一些高级特性包括元编程(运行时修改代码的能力)、闭包(匿名函数或lambda表达式)和符号(Symbol)等。符号是不可变的对象,常用于表示标识符,节省内存。 通过这本“Ruby笔记3”,你将能够深入理解...

    Python 学习笔记 第三版1

    《Python 学习笔记 第三版1》是一本面向有一定Python编程基础的读者的书籍,旨在深入解析Python 3.6的语言特性。作者虽然已经具备一定的写作经验,但仍然谦虚地表示无法确保内容完全正确,同时满足所有人的需求。他...

    ruby介绍及相应的ruby demo示意源码,供大家参考学习

    Ruby还提供了丰富的内建库,如文件操作、网络通信、正则表达式等,使得开发者能快速构建各种应用。 Ruby on Rails是Ruby最知名的Web开发框架,它倡导“约定优于配置”的原则,极大地提高了开发效率。Rails提供了...

    Ruby简洁学习笔记(一):字符串、数字、类和对象

    在Ruby的`String`类中,字符串可以包含变量、特殊字符和表达式。例如: ```ruby puts "Hello #{showname}" puts("\n\t#{(1+2) * 3}\nGoodbye") ``` 在这段代码中,`#{}` 用于计算表达式 `(1+2) * 3` 的结果,并将其...

    jdk6学习笔记(17,18,19,20,21)

    这些学习笔记涵盖了第17到21章的内容,以下是其中的一些关键知识点: 1. **枚举(Enum)的增强**: JDK 6对枚举类型进行了增强,支持枚举常量之间的比较,可以实现Comparable接口,还引入了枚举套接字(EnumSet)...

    Groovy语法&Gradle配置学习笔记

    Groovy语法借鉴了多种语言的特性,如Python、Ruby和Java,这使得Java开发人员能够轻松上手。Gradle则是一种强大的构建自动化工具,广泛用于Java、Android以及其他JVM语言的项目,它允许通过Groovy或Kotlin DSL(领域...

    solr_学习笔记_v1.1

    ### Solr学习笔记_v1.1 - 高性能搜索引擎的核心参数与查询语法详解 #### 一、Query参数:深入理解Solr查询的核心要素 Solr作为高性能的全文搜索引擎,其强大的查询能力很大程度上依赖于一系列精细调整的参数。以下...

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    Ruby中的String对象学习笔记

    String对象的定义可以使用””和”,对于单纯的字符串,推荐使用”进行定义,效率比””高,””与”的区别在于,”内的字符串定义后就是最终形态,即使如\n换行符,也会原样输出,而””更像是一个表达式,解析器会...

    java8集合源码-fanspaceshow.github.io:学习笔记

    IBM笔记 Ebook 学习经验  Java org.springframework.util.FileCopyUtils  JavaScript  jQuery  Android  Python  PHP  Ruby-Jekyll  CSS  elFinder  Ubuntu  CentOS  VPS  数据库  正则表达式 MiniDao...

    web敏捷开发rails笔记

    通过以上内容的学习,我们了解了Rails的基本环境搭建、应用创建、控制器与视图的关系、动态内容的展示方式以及敏捷开发的思想。Rails以其高效简洁的特点,成为了Web开发领域的重要工具之一。掌握Rails不仅能够提高...

    高级笔记本

    5. **查找与替换**:强大的查找和替换功能,不仅支持简单的文本搜索,还能进行正则表达式搜索,便于快速修改大量代码。 6. **多文档同时编辑**:编辑器可以同时打开并编辑多个文件,方便比较或协同工作。 7. **...

Global site tag (gtag.js) - Google Analytics