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.
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" 了然后对括号内变量进行第 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 布尔判断采取 "短路求解"(当第个操作书符合或不符合时放弃后续判断)同时定义了新操作符 "d?" 来判断参数是否已经被定义
puts d?(a)
a = 1
puts d?(a)
输出:
nil
local-variable
如果参数未定义d? 返回 nil否则返回个标记串
和我们所习惯布尔表达式区别是Ruby 操作符 &&、and、||、or 返回首个决定条件真伪参数值而不是 true 或 false
puts "a" && "b" # a 为真所以决定表达式真伪是 b返回 b
puts nil && "b" # nil 导致短路求解故返回 nil
puts "a" || "b" # 同样是短路求解返回 a
最新评论