Ruby编程:结构、编码与数据类型详解
立即解锁
发布时间: 2025-08-16 02:11:46 阅读量: 2 订阅数: 8 


Ruby编程语言核心概念与实践
# Ruby编程:结构、编码与数据类型详解
## 1. Ruby文件结构要点
### 1.1 文件注释与执行标记
- **Shebang注释**:若Ruby程序包含“shebang”注释,用于告知(类Unix)操作系统如何执行该程序,此注释必须位于第一行。
- **编码注释**:若程序包含“编码”注释,该注释通常需在第一行;若第一行为shebang注释,则可在第二行。
### 1.2 文件结束标记
当文件中出现仅含`__END__`且前后无空白字符的行时,Ruby解释器将停止处理该文件。文件剩余部分可包含任意数据,程序可通过`IO`流对象`DATA`读取这些数据。
### 1.3 代码示例
```ruby
#!/usr/bin/ruby -w # shebang comment
# -*- coding: utf-8 -*- # coding comment
require 'socket' # load networking library
... # program code goes here
__END__ # mark end of code
... # program data goes here
```
### 1.4 多文件加载
Ruby程序并非必须存于单个文件中,可使用`require`从外部库加载额外的Ruby代码。`require`会在搜索路径中查找指定的代码模块,并防止同一模块被多次加载。
## 2. 程序编码
### 2.1 基本编码规则
- 底层上,Ruby程序是字符序列,其词法规则基于ASCII字符集定义。注释以`#`(ASCII码35)开头,允许的空白字符包括水平制表符(ASCII 9)、换行符(10)等。
- 默认情况下,Ruby解释器假定源代码采用ASCII编码,但也能处理其他可表示完整ASCII字符集的编码文件。
### 2.2 字符灵活性
Ruby解释器对程序中的字符处理较为灵活。特定ASCII字符有特定含义,标识符中不允许某些ASCII字符,但除此之外,程序可包含编码允许的任意字符。例如,标识符、注释、字符串和正则表达式字面量可包含除注释或字面量结束分隔符之外的任意字符。
### 2.3 指定程序编码
#### 2.3.1 Ruby 1.8
在Ruby 1.8中,可使用`-K`命令行选项指定不同编码。例如,使用`-Ku`选项运行包含UTF - 8编码Unicode字符的程序,使用`-Ke`和`-Ks`选项运行包含EUC - JP或SJIS编码日语字符的程序。
#### 2.3.2 Ruby 1.9
- **编码注释**:推荐在文件开头添加特殊的“编码注释”来指定脚本编码。例如:
```ruby
# coding: utf-8
```
注释须全用ASCII编写,包含`coding`字符串,后跟冒号或等号及所需编码名称(编码名称不能含空格或除连字符和下划线外的标点符号)。
- **不同编辑器的编码注释示例**:
- Emacs用户:`# -*- coding: utf-8 -*-`
- vi用户:`# vi: set fileencoding=utf-8 :`
- **编码注释位置**:通常编码注释仅在文件第一行有效,若第一行为shebang注释,则可在第二行。
- **支持的编码**:Ruby 1.9至少支持ASCII - 8BIT(又名BINARY)、US - ASCII(7位ASCII)、ISO - 8859 - 1至ISO - 8859 - 15等欧洲编码、UTF - 8、SHIFT_JIS(又名SJIS)和EUC - JP等日语编码。
- **UTF - 8文件特殊情况**:若UTF - 8编码文件的前三个字节为`0xEF 0xBB 0xBF`(即BOM或“字节顺序标记”),则可识别其编码,该标记在UTF - 8文件中可选。
- **获取编码信息**:在Ruby 1.9中,`__ENCODING__`关键字可返回当前执行代码的源编码,结果为`Encoding`对象。
### 2.4 源编码、外部编码和内部编码
#### 2.4.1 源编码
源编码告知Ruby解释器如何读取脚本中的字符,通常通过编码注释设置。一个Ruby程序可能包含多个文件,不同文件可使用不同的源编码,源编码会影响文件中字符串字面量的编码。
#### 2.4.2 默认外部编码
默认外部编码是Ruby从文件和流读取数据时默认使用的编码,它对整个Ruby进程是全局的,不随文件变化。通常基于计算机的区域设置,也可通过命令行选项显式指定。该编码不影响字符串字面量的编码,但对I/O操作很重要。
#### 2.4.3 默认内部编码
若希望将所有文本自动转换为单一通用编码,可使用命令行选项指定默认内部编码。
#### 2.4.4 命令行选项
- `-K`选项:在Ruby 1.8中用于设置源编码,在Ruby 1.9中主要为兼容保留,非首选设置默认外部编码的方式。
- `-E`和`--encoding`选项:可设置默认外部和内部编码,并可使用完整编码名称指定。示例如下:
```bash
ruby -E utf-8 # Default external encoding name follows -E
ruby -Eutf-8 # The space is optional
ruby -E utf-8:binary # Specify external and internal encodings
ruby -E :sjis # Specify default internal encoding only
ruby --encoding utf-8 # --encoding is just like -E
ruby --encoding=utf-8 # Or use an equals sign with --encoding
```
- `-U`选项:指定默认内部编码为UTF - 8,是`-E:utf-8`的快捷方式。
#### 2.4.5 查询编码信息
可使用`Encoding.default_external`和`Encoding.default_internal`查询默认外部和内部编码,使用`Encoding.locale_charmap`获取基于区域设置的字符编码名称。
## 3. 程序执行
### 3.1 脚本语言特性
Ruby是脚本语言,程序是待执行语句的列表,默认按语句出现顺序依次执行。Ruby的控制结构可改变默认执行顺序,实现条件执行或重复执行。
### 3.2 与编译语言的差异
- **无特殊入口方法**:与C或Java等传统静态编译语言不同,Ruby没有特殊的`main`方法作为执行起点,解释器从文件第一行开始执行,直至结束。
- **模块、类和方法定义**:在编译语言中,模块、类和方法定义是由编译器处
0
0
复制全文
相关推荐










