好的!以下是 Ruby 语法 的简明教程,涵盖基础结构、核心概念和常用语法规则。我会尽量清晰地讲解,并用中文和示例帮助你快速掌握 Ruby 的精髓。让我们开始吧!


Ruby 语法基础

1. 基本规则

  • 无需分号:Ruby 不要求每行以分号 ; 结尾(除非在一行写多条语句)。
  • 注释
  • 单行:# 这是一条注释
  • 多行:=begin=end 包裹:
    ruby =begin 这是一个多行注释 可以写多行 =end
  • 代码块缩进:通常用 2 个空格(约定俗成),但不是强制要求。
  • 文件名:Ruby 文件以 .rb 结尾,例如 script.rb

2. 输出

puts "你好,世界!"  # 打印并换行
print "你好,"       # 打印不换行
p "你好"             # 打印原始值(调试用),带换行

运行结果:

你好,世界!
你好,你好
"你好"

3. 变量与数据类型

Ruby 是动态类型语言,无需声明变量类型。

变量类型

  • 局部变量:小写字母或下划线开头,例如 name = "张三"
  • 全局变量:以 $ 开头,例如 $global_var = 10
  • 实例变量:以 @ 开头,例如 @age = 25
  • 类变量:以 @@ 开头,例如 @@count = 0
  • 常量:大写开头,例如 PI = 3.14

数据类型

string = "你好"              # 字符串
number = 42                 # 整数
float = 3.14                # 浮点数
boolean = true              # 布尔值
array = [1, "二", 3]        # 数组
hash = { name: "李四", age: 30 }  # 哈希(键值对)
symbol = :hello             # 符号(轻量级常量)
nil_value = nil             # 空值

4. 运算符

  • 算术+, -, *, /, %(取模),**(幂)
  puts 5 + 3    # 8
  puts 10 / 2   # 5
  puts 2 ** 3   # 8
  • 比较==, !=, <, >, <=, >=
  puts 5 > 3    # true
  • 逻辑&&(与),||(或),!(非)
  puts true && false  # false

5. 字符串操作

  • 插值:使用 #{} 在字符串中嵌入表达式
  name = "张三"
  puts "你好,#{name}!"  # 你好,张三!
  • 连接
  puts "你" + "好"  # 你好
  • 方法
  text = "你好,Ruby"
  puts text.length    # 7(字符数)
  puts text.upcase    # 你好,RUBY
  puts text[0..1]     # 你好(切片)

6. 控制流

条件语句

age = 20
if age >= 18
  puts "你是成年人"
elsif age >= 13
  puts "你是青少年"
else
  puts "你是儿童"
end
  • 单行写法:
  puts "成人" if age >= 18

unless(除非)

unless age >= 18
  puts "你不是成人"
else
  puts "你是成人"
end

case 语句

grade = "A"
case grade
when "A"
  puts "优秀"
when "B"
  puts "良好"
else
  puts "加油"
end

循环

  • while
  i = 0
  while i < 3
    puts "第 #{i} 次"
    i += 1
  end
  • each(常用):
  [1, 2, 3].each do |n|
    puts n
  end

单行写法:

  [1, 2, 3].each { |n| puts n }
  • times
  3.times { puts "你好" }

7. 方法(函数)

def greet(name)
  "你好,#{name}!"
end
puts greet("李四")  # 你好,李四!
  • 默认参数
  def greet(name = "朋友")
    "你好,#{name}!"
  end
  puts greet  # 你好,朋友!
  • 返回值:最后一行自动作为返回值,无需显式 return(但可以用)。

8. 类与对象

Ruby 是面向对象的语言:

class Person
  def initialize(name)  # 构造函数
    @name = name        # 实例变量
  end

  def say_hello
    "你好,我是 #{@name}"
  end
end

p = Person.new("张三")
puts p.say_hello  # 你好,我是 张三

属性访问器

class Person
  attr_accessor :name  # 自动生成 getter 和 setter
  def initialize(name)
    @name = name
  end
end

p = Person.new("李四")
puts p.name       # 李四
p.name = "王五"
puts p.name       # 王五

9. 数组与哈希

数组

fruits = ["苹果", "香蕉", "橙子"]
puts fruits[0]      # 苹果
fruits << "葡萄"    # 添加元素
fruits.each { |f| puts f }  # 遍历

哈希

person = { name: "张三", age: 25 }
puts person[:name]  # 张三
person[:city] = "北京"  # 添加键值对
person.each { |key, value| puts "#{key}: #{value}" }

10. 块(Blocks)

块是 Ruby 的特色,常用在迭代或回调中:

3.times do |i|
  puts "第 #{i} 次"
end

或用大括号:

[1, 2, 3].map { |n| n * 2 }  # 返回 [2, 4, 6]

11. 异常处理

begin
  result = 10 / 0
rescue ZeroDivisionError => e
  puts "错误:#{e.message}"  # 错误:divided by 0
ensure
  puts "无论如何都会执行"
end

12. 中文支持

Ruby 默认支持 UTF-8,可以直接使用中文:

puts "你好,#{ENV["USER"] || "用户"}!"

实践示例

# 一个简单的中文问候程序
def greet(name)
  "你好,#{name}!今天是 #{Time.now.strftime("%Y年%m月%d日")}"
end

puts greet("张三")

输出:你好,张三!今天是 2025年03月22日


下一步

  • 试试代码:告诉我你想练习哪部分语法,我可以设计一个例子。
  • 深入学习:想聚焦某个主题(比如类、块或异常)吗?我可以详细讲解。
  • 问题解答:有不明白的语法点吗?直接问我!

你现在想做什么?写代码、问问题,还是其他?