Ruby 语法
Ruby 基本语法
Section titled “Ruby 基本语法”让我们从一个最小的 Ruby 程序开始。Ruby 文件通常使用 .rb 扩展名。
#!/usr/bin/env ruby# 上面这行是 'shebang',在类 Unix 系统中很常见,用于指定解释器。# -w 启用警告,这是开发过程中的良好实践。
puts "Hello, Ruby!"要运行它,请将其保存为 hello.rb 并在终端中执行:
$ ruby hello.rb这将输出:
Hello, Ruby!现在,让我们探讨一些基本的语法概念:
空白符和行结束符:
Section titled “空白符和行结束符:”空白符(空格、制表符)通常会被忽略,除非在字符串字面量内或用于消除歧义。一致的缩进对于可读性至关重要,但语法上解释器本身并不强制要求(尽管像 RuboCop 这样的风格指南会强制执行)。
Ruby 将分号(;)和换行符解释为语句的结束。如果每个语句都在自己的行上,则很少需要分号。要将语句延续到下一行,请在当前行末尾使用运算符(如 +、-)或反斜杠(“)。
a = 1 + 2 + \ 3 # 使用反斜杠延续语句puts a # 输出:6
b = 10 + 5 # 由于以运算符结尾而延续语句puts b # 输出:15Ruby 标识符和命名约定:
Section titled “Ruby 标识符和命名约定:”标识符是变量、常量、方法、类和模块的名称。Ruby 标识符是大小写敏感的(例如,name 和 Name 是不同的)。它们通常由字母数字字符和下划线(_)组成。
常见的命名约定:
- 局部变量和方法名:
snake_case(例如,user_name,calculate_total)。 - 实例变量:
@snake_case(例如,@user_name)。 - 类变量:
@@snake_case(例如,@@instance_count)。 - 全局变量:
$snake_case或$kebab-case(例如,$debug_mode)。谨慎使用。 - 常量:
UPPER_SNAKE_CASE(例如,MAX_USERS,PI)。 - 类名和模块名:
CamelCase(例如,UserServic,HttpUtils)。
方法名可以以 ? 结尾(约定俗成地用于返回布尔值的方法,例如 empty?)或以 ! 结尾(约定俗成地用于修改其接收者或具有更危险/令人惊讶效果的方法,例如 sort!)。
保留字(关键字):
Section titled “保留字(关键字):”这些词在 Ruby 中具有特殊含义,不能用作变量名或常量名。但是,它们有时可以用作方法名。
| 关键字组 1 | 关键字组 2 | 关键字组 3 | 关键字组 4 |
|---|---|---|---|
BEGIN | END | alias | and |
begin | break | case | class |
def | defined? | do | else |
elsif | end | ensure | false |
for | if | in | module |
next | nil | not | or |
redo | rescue | retry | return |
self | super | then | true |
undef | unless | until | when |
while | yield | __FILE__ | __LINE__ |
__ENCODING__ |
此列表具有代表性。有关权威列表,请查阅官方 Ruby 文档。
Here 文档(Heredocs):
Section titled “Here 文档(Heredocs):”Heredocs 是一种创建多行字符串的便捷方式。它们以 << 后跟一个分隔符开头。当分隔符再次单独出现在一行时,字符串结束。
标准 Heredoc (<<DELIMITER): 插值和转义序列会被处理。
name = "World"standard_heredoc = <<MESSAGEHello, #{name}!This is a multi-line string. Indentation is preserved.MESSAGEputs standard_heredoc非插值 Heredoc (<<'DELIMITER'): 不处理插值或转义序列。
non_interpolating_heredoc = <<'TEXT'This will print literally: #{name}\n.TEXTputs non_interpolating_heredoc波浪线 Heredoc (<<~DELIMITER): 这非常有用。它允许你在源代码中缩进 Heredoc 内容以提高可读性,并且会自动移除每行前导的空白符,直到最少缩进的行或结束分隔符的级别。
def get_message user = "Alice" squiggly_heredoc = <<~GREETING Hello, #{user}. Welcome to our application! We hope you enjoy your stay. GREETING # 'We hope' 行将有 2 个空格缩进,GREETING 将有 0 个。endputs get_message用于命令执行的 Heredoc (<<DELIMITER“): 内容会作为 shell 命令执行。
command_output = <<`CMD`echo Listing files:ls -lahCMDputs command_output结束分隔符必须在其行的开头,可选地后跟一个分号。<<(或 <<~、<<-)和分隔符之间不应有空格。
BEGIN 和 END 块:
Section titled “BEGIN 和 END 块:”Ruby 允许你定义在特定时间执行的代码块:
BEGIN { code }:BEGIN块内的代码在脚本中任何其他代码运行之前执行一次。END { code }:END块内的代码在程序终止之前执行(包括异常处理期间),在所有其他代码运行后。
#!/usr/bin/ruby
puts "这是主 Ruby 程序。"
BEGIN { puts "正在初始化 Ruby 程序... (BEGIN 块)"}
END { puts "正在终止 Ruby 程序... (END 块)"}输出:
正在初始化 Ruby 程序... (BEGIN 块)这是主 Ruby 程序。正在终止 Ruby 程序... (END 块)BEGIN 和 END 块在现代应用程序代码中不太常见,但在脚本或特定库场景中用于设置/清理可能有用。
注释会被 Ruby 解释器忽略,用于解释代码。
- 单行注释: 以
#(井号)字符开头,并延伸到行尾。 - 多行(块)注释: 以
=begin开头,其后独占一行,以=end结尾,其前独占一行。这两个标记之间的所有内容都是注释。它们必须分别在其行的最开头。
# 这是一个单行注释。
x = 10 # 这是语句后的注释。
=begin这是一个多行注释。它可以跨越多行。对于临时禁用大块代码很有用。=end
puts "多行注释后的代码。"理解这些基本语法规则是编写有效的 Ruby 程序的第一步。