Ruby 语法

Ruby 语法中文讲解

Ruby 是一种简洁、优雅且强大的编程语言,以其直观的语法和面向对象的特性受到开发者喜爱。以下是对 Ruby 语法的基础讲解,涵盖核心概念、常见结构和中文处理相关内容,基于 Ruby 3.4.x(截至 2025 年 8 月的最新稳定版)。本文适合初学者,同时提供中文相关的注意事项。


1. 基础语法概述

Ruby 的语法设计注重简洁和人类可读性,强调“最小惊讶原则”。以下是 Ruby 的核心语法特点:

  • 动态类型:变量无需声明类型。
  • 面向对象:一切皆对象,包括数字和字符串。
  • 块和迭代器:使用块(blocks)简化循环和逻辑。
  • 中文支持:默认使用 UTF-8 编码,适合处理中文字符串。

2. 基本语法元素

2.1 注释
  • 单行注释:以 # 开头。
  # 这是一个单行注释
  puts "你好"
  • 多行注释:使用 =begin=end
  =begin
  这是一个多行注释
  支持中文说明
  =end
2.2 变量
  • Ruby 有五种变量类型:
  • 局部变量:小写字母或下划线开头,如 name
  • 实例变量:以 @ 开头,如 @name
  • 类变量:以 @@ 开头,如 @@count
  • 全局变量:以 $ 开头,如 $global
  • 常量:大写字母开头,如 NAME
  • 示例:
  name = "小明"  # 局部变量
  @age = 20      # 实例变量
  @@count = 0    # 类变量
  $version = "3.4"  # 全局变量
  NAME = "常量"   # 常量
  puts name, @age, @@count, $version, NAME
2.3 数据类型
  • 数字
  age = 25
  price = 99.99
  • 字符串(支持中文):
  greeting = "你好,世界!"
  puts greeting.encoding  # 输出: UTF-8
  • 符号(轻量级不可变字符串):
  key = :name
  • 数组
  fruits = ["苹果", "香蕉", "橙子"]
  puts fruits[0]  # 输出: 苹果
  • 哈希
  person = { name: "小明", age: 20 }
  puts person[:name]  # 输出: 小明
  • 范围
  range = 1..5  # 包含 1 到 5
  puts range.to_a  # 输出: [1, 2, 3, 4, 5]
2.4 编码声明
  • Ruby 默认使用 UTF-8,中文处理需在文件开头声明:
  # encoding: UTF-8
  puts "中文字符串"
  • 若处理 GBK(常见于 Windows),声明:
  # encoding: GBK

3. 控制结构

3.1 条件语句
  • if/else
  age = 18
  if age >= 18
    puts "成年人"
  else
    puts "未成年人"
  end
  • unless(相当于 if not):
  unless age >= 18
    puts "未成年人"
  else
    puts "成年人"
  end
  • 三元运算符
  status = age >= 18 ? "成年人" : "未成年人"
  puts status
3.2 循环
  • while
  count = 0
  while count < 3
    puts "第 #{count} 次"
    count += 1
  end
  • each 迭代器(更常用):
  ["苹果", "香蕉", "橙子"].each do |fruit|
    puts "水果: #{fruit}"
  end
  • for
  for i in 1..3
    puts "第 #{i} 次"
  end
3.3 块(Blocks)
  • 块是 Ruby 的核心特性,常与迭代器一起使用。
  3.times { puts "你好!" }

或多行形式:

  [1, 2, 3].each do |n|
    puts "数字: #{n}"
  end

4. 函数(方法)

  • 定义方法使用 def
  def greet(name)
    "你好,#{name}!"
  end
  puts greet("小明")  # 输出: 你好,小明!
  • 默认参数:
  def welcome(name = "朋友")
    "欢迎,#{name}!"
  end
  puts welcome  # 输出: 欢迎,朋友!
  • 返回值:Ruby 自动返回最后一行表达式的值,或使用 return
  def add(a, b)
    return a + b
  end
  puts add(2, 3)  # 输出: 5

5. 类与面向对象

Ruby 是纯粹的面向对象语言,一切皆对象。

5.1 定义类
class Person
  # 构造函数
  def initialize(name, age)
    @name = name  # 实例变量
    @age = age
  end

  # 实例方法
  def introduce
    "我叫#{@name},#{@age}岁"
  end

  # 类方法
  def self.description
    "这是一个 Person 类"
  end
end

person = Person.new("小明", 20)
puts person.introduce  # 输出: 我叫小明,20岁
puts Person.description  # 输出: 这是一个 Person 类
5.2 继承
class Student < Person
  def study
    "#{@name} 在学习"
  end
end

student = Student.new("小红", 18)
puts student.introduce  # 输出: 我叫小红,18岁
puts student.study      # 输出: 小红 在学习
5.3 模块(Module)
  • 用于组织代码或混入(Mixin):
  module Greetable
    def say_hello
      "你好!"
    end
  end

  class Person
    include Greetable
  end

  person = Person.new
  puts person.say_hello  # 输出: 你好!

6. 中文处理相关语法

Ruby 对中文支持良好,但需注意编码和字符串操作:

  1. 字符串编码
  • 检查编码:
    ruby str = "你好,世界!" puts str.encoding # 输出: UTF-8
  • 转换编码:
    ruby gbk_str = str.encode("GBK") puts gbk_str.encoding # 输出: GBK
  1. 中文字符串操作
  • 长度计算(按字符):
    ruby str = "你好" puts str.length # 输出: 2
  • 按字符迭代:
    ruby str.each_char { |c| puts c } # 输出: 你\n好
  • 正则表达式:
    ruby str = "你好,世界!" puts str.match(/[你世]/).to_a # 输出: ["你", "世"]
  1. 文件操作与中文
  • 读取中文文件:
    ruby # encoding: UTF-8 File.open("中文.txt", "r:UTF-8") { |f| puts f.read }
  • 写入中文:
    ruby # encoding: UTF-8 File.write("output.txt", "你好,世界!", encoding: "UTF-8")

7. 异常处理

使用 begin/rescue/end 处理错误:

begin
  File.open("不存在.txt", "r")
rescue Errno::ENOENT
  puts "文件不存在!"
rescue StandardError => e
  puts "错误: #{e.message}"
end

8. 常见问题与中文相关注意事项

  1. 中文乱码
  • 确保文件保存为 UTF-8(无 BOM)。
  • 在脚本开头添加 # encoding: UTF-8
  • Windows CMD 用户设置:
    bash chcp 65001
  • 或使用 PowerShell/Windows Terminal。
  1. 字符串操作问题
  • 中文字符按单个字符计算长度,不按字节:
    ruby str = "你好" puts str.bytesize # 输出: 6(UTF-8 中每个中文字符占 3 字节) puts str.length # 输出: 2(字符数)
  1. 正则表达式与中文
  • 使用 Unicode 范围匹配中文:
    ruby str = "你好,world!" puts str.scan(/\p{Han}/) # 输出: ["你", "好"]

9. 最佳实践

  • 编码统一:始终使用 UTF-8,脚本、文件和终端保持一致。
  • 命名规范:变量和方法名使用小写加下划线(如 user_name),常量大写(如 MAX_COUNT)。
  • 使用块:优先使用 eachmap 等迭代器,减少显式循环。
  • 模块化:使用模块组织代码,提高复用性。

10. 进阶建议

  • 学习 Rails:Ruby on Rails 框架基于 Ruby 语法,适合 Web 开发。
  • 调试工具
  • 安装 pry
    bash gem install pry
  • 示例:
    ruby require 'pry' str = "你好" binding.pry # 进入交互式调试
  • 国际化(i18n)
  • 在 Rails 中使用 i18n gem 处理中文:
    yaml # config/locales/zh-CN.yml zh-CN: hello: "你好"

11. 社区资源

通过以上讲解,你可以掌握 Ruby 的基本语法并处理中文相关任务。如果需要深入某个主题(如类设计、Rails 或复杂中文处理),请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注