好的!以下是 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日
下一步
- 试试代码:告诉我你想练习哪部分语法,我可以设计一个例子。
- 深入学习:想聚焦某个主题(比如类、块或异常)吗?我可以详细讲解。
- 问题解答:有不明白的语法点吗?直接问我!
你现在想做什么?写代码、问问题,还是其他?
发表回复