- 第1节:Ruby 简介
- 第2节:Ruby 环境
- 第3节:Ruby 安装 – Unix
- 第4节:Ruby 安装 – Windows
- 第5节:Ruby 中文编码
- 第6节:Ruby 命令行选项
- 第7节:Ruby 环境变量
- 第8节:Ruby 语法
- 第9节:Ruby 数据类型
- 第10节:Ruby 类和对象
- 第11节:Ruby 类案例
- 第12节:Ruby 变量
- 第13节:Ruby 运算符
- 第14节:Ruby 注释
- 第15节:Ruby 条件判断
- 第16节:Ruby 循环
- 第17节:Ruby 方法
- 第18节:Ruby 块
- 第19节:Ruby 模块(Module)
- 第20节:Ruby 字符串(String)
- 第21节:Ruby 数组(Array)
- 第22节:Ruby 哈希(Hash)
- 第23节:Ruby 日期 & 时间(Date & Time)
- 第24节:Ruby 范围(Range)
- 第25节:Ruby 迭代器
- 第26节:Ruby 文件的输入与输出
- 第27节:Ruby File 类和方法
- 第28节:Ruby Dir 类和方法
- 第29节:Ruby 异常
- 第30节:Ruby 面向对象
- 第31节:Ruby 正则表达式
- 第32节:Ruby 数据库访问 – DBI 教程
- 第33节:Ruby 连接 Mysql – MySql2
- 第34节:Ruby CGI 编程
- 第35节:Ruby CGI方法
- 第36节:Ruby CGI Cookies
- 第37节:Ruby CGI Sessions
- 第38节:Ruby 发送邮件 – SMTP
- 第39节:Ruby Socket 编程
- 第40节:Ruby XML, XSLT 和 XPath 教程
- 第41节:Ruby Web Services 应用 – SOAP4R
- 第42节:Ruby 多线程
- 第43节:Ruby JSON
- 第44节:Ruby RubyGems
Ruby 运算符
Ruby 支持一套丰富的运算符。大多数运算符实际上是方法调用。例如,a + b 被解释为 a.+(b),其中指向变量 a 的 + 方法被调用,b 作为方法调用的参数。
对于每个运算符(+ - * / % ** & | ^ << >> && ||),都有一个相对应的缩写赋值运算符(+= -= 等等)。
Ruby 算术运算符
假设变量 a 的值为 10,变量 b 的值为 20,那么:
Ruby 比较运算符
假设变量 a 的值为 10,变量 b 的值为 20,那么:
Ruby 赋值运算符
假设变量 a 的值为 10,变量 b 的值为 20,那么:
Ruby 并行赋值
Ruby 也支持变量的并行赋值。这使得多个变量可以通过一行的 Ruby 代码进行初始化。例如:
a = 10
b = 20
c = 30
使用并行赋值可以更快地声明:
a, b, c = 10, 20, 30
并行赋值在交换两个变量的值时也很有用:
a, b = b, c
Ruby 位运算符
位运算符作用于位,并逐位执行操作。
假设如果 a = 60,且 b = 13,现在以二进制格式,它们如下所示:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
下表列出了 Ruby 支持的位运算符。
Ruby 逻辑运算符
下表列出了 Ruby 支持的逻辑运算符。
假设变量 a 的值为 10,变量 b 的值为 20,那么:
Ruby 三元运算符
有一个以上的操作称为三元运算符。第一个计算表达式的真假值,然后根据这个结果决定执行后边两个语句中的一个。条件运算符的语法如下:
Ruby 范围运算符
在 Ruby 中,序列范围用于创建一系列连续的值 - 包含起始值、结束值(视情况而定)和它们之间的值。
在 Ruby 中,这些序列是使用 ".." 和 "..." 范围运算符来创建的。两点形式创建的范围包含起始值和结束值,三点形式创建的范围只包含起始值不包含结束值。
Ruby defined? 运算符
defined? 是一个特殊的运算符,以方法调用的形式来判断传递的表达式是否已定义。它返回表达式的描述字符串,如果表达式未定义则返回 nil。
下面是 defined? 运算符的各种用法:
用法 1
defined? variable # 如果 variable 已经初始化,则为 True
例如:
foo = 42
defined? foo # => "local-variable"
defined? $_ # => "global-variable"
defined? bar # => nil(未定义)
用法 2
defined? method_call # 如果方法已经定义,则为 True
例如:
defined? puts # => "method"
defined? puts(bar) # => nil(在这里 bar 未定义)
defined? unpack # => nil(在这里未定义)
用法 3
# 如果存在可被 super 用户调用的方法,则为 True
defined? super
例如:
defined? super # => "super"(如果可被调用)
defined? super # => nil(如果不可被调用)
用法 4
defined? yield # 如果已传递代码块,则为 True
例如:
defined? yield # => "yield"(如果已传递块)
defined? yield # => nil(如果未传递块)
Ruby 点运算符 "." 和双冒号运算符 "::"
您可以通过在方法名称前加上模块名称和一条下划线来调用模块方法。您可以使用模块名称和两个冒号来引用一个常量。
:: 是一元运算符,允许在类或模块内定义常量、实例方法和类方法,可以从类或模块外的任何地方进行访问。
请记住:在 Ruby 中,类和方法也可以被当作常量。
您只需要在表达式的常量名前加上 :: 前缀,即可返回适当的类或模块对象。
如果未使用前缀表达式,则默认使用主 Object 类。
下面是两个实例:
MR_COUNT = 0 # 定义在主 Object 类上的常量
module Foo
MR_COUNT = 0
::MR_COUNT = 1 # 设置全局计数为 1
MR_COUNT = 2 # 设置局部计数为 2
end
puts MR_COUNT # 这是全局常量
puts Foo::MR_COUNT # 这是 "Foo" 的局部常量
第二个实例:
CONST = ' out there'
class Inside_one
CONST = proc {' in there'}
def where_is_my_CONST
::CONST + ' inside one'
end
end
class Inside_two
CONST = ' inside two'
def where_is_my_CONST
CONST
end
end
puts Inside_one.new.where_is_my_CONST
puts Inside_two.new.where_is_my_CONST
puts Object::CONST + Inside_two::CONST
puts Inside_two::CONST + CONST
puts Inside_one::CONST
puts Inside_one::CONST.call + Inside_two::CONST
Ruby 运算符的优先级
下表按照运算符的优先级从高到低列出了所有的运算符。
注意:在方法列标识为 是 的运算符实际上是方法,因此可以被重载。