Ruby 快速上手
安装 Ruby
从 官网 下载安装包然后安装。如果使用多个版本的 Ruby,可以考虑 RVM。
安装好之后,在命令行输入以下命令,有输出就代表一切正常。
1 | ruby -v |
当安装完 ruby 后,打开命令行输入 irb,即可进入 irb 运行环境。这就像输入 node 进入 node 运行环境,输入 python 进入 python 运行环境。
gems
RubyGems 是 Ruby 项目的包管理工具。Ruby 自带 gem,好比 nodejs 自带 npm。
常用的 Gems 命令:
1 | # 查看所有的包 |
bundle
当你配置好 ruby 环境后,我们需要根据已有的项目文件配置项目环境,安装依赖包。
和 nodejs 一样,ruby 的依赖信息存放于项目根目录下的 Gemfile 和 Gemfile.lock 文件里。
不同的是,我们需要用 bundle install
来安装依赖包(蠢得不行)。如果 bundle 的安装卡住了,可以考虑使用 bundle install --verbose
来查看安装过程。
Ruby 基本语法
ruby 和 python 一样,是一个解释型语言、弱类型语言,因此 ruby 的代码运行只需要指定解释器即可。
变量
命名规则
“$” 开头的变量:全局变量
“@” 开头的变量:实例变量
“@@” 开头的变量:类变量
小写字母或者下划线开头的变量:局部变量
赋值
没有什么特别的。只需要注意赋值语句的返回值是被赋值对象的值。也就是说,下面的语句是可行的。
1 | x = y = 114514 |
算数操作
ruby 支持大部分常见的算数操作,也可以重载这些操作。
1 | a + b |
注释
1 | # 这是单行注释 |
Here Document
鸡肋中的鸡肋。
“Here Document” 是指建立多行字符串。在 << 之后,可以指定一个字符串或标识符来终止字符串,且当前行之后直到终止符为止的所有行是字符串的值。
如果终止符用引号括起,引号的类型决定了面向行的字符串类型。请注意 << 和终止符之间必须没有空格。
1 | print <<EOF |
BEGIN 语句
1 | BEGIN { |
BEGIN 中的语句会在程序运行前被调用。
END 语句
1 | END { |
END 中的语句会在程序结束时被调用。
函数
常用函数
1 | puts "a" |
数据类型
空指针
不是 null
而是 nil
。
字符串
双引号标记的字符串允许替换和使用反斜线符号,单引号标记的字符串不允许替换,且只允许使用 \\ 和 \‘ 两个反斜线符号。
在双引号标记的字符串里,可以使用 #{expr}
将 expr 的值带入字符串中。
1 | puts 'abc "\\"' # abc "\" |
数组
数组字面量通过 [] 定义,且支持 range 定义。尾部的逗号会被忽略。
- 数组通过 [index] 索引访问
- 通过赋值操作插入、删除、替换元素
- 通过 +、- 号进行合并和删除元素(集合做为新集合出现,也就是说集合是不可变对象)
- 通过 << 号向原数据追加元素
- 通过 * 号重复数组元素
- 通过|和&符号做并集和交集操作
集合
在大括号内放置一系列 键值对,键值之间使用逗号和序列 => 分隔。尾部的逗号会被忽略。
1 | number = {1 => 'one', 2 => 'two', } |
范围 Range
一个范围表示一个区间。范围是通过设置一个开始值和一个结束值来表示。范围可使用 s..e
和 s...e
来构造,或者通过 Range.new
来构造。
使用 .. 构造的范围从开始值运行到结束值(包含结束值)。使用 … 构造的范围从开始值运行到结束值(不包含结束值)。
1 | (1..2).each do |n| |
可以使用 range.to_a
将范围转换为数组
1 | $, =", " # Array 值分隔符 |
范围也可以用作条件表达式和检查指定值是否在指定的范围内。
1 | if ((1..10) === 5) |
控制流
条件语句
通过 if-else
做条件判断。
1 | if 2 > 1 |
注意,Ruby 的 else if 语句简写为 elsif,不是 elseif 也不是 elif!!!
1 | if 2 > 1 |
和 Python 一样,Ruby 支持倒装语句。
1 | def hey_ho? |
循环
while
自行体会:
1 | num = 1 |
for
将变量 num 传递给块,for 语句将迭代它。
1 | for num in 1...10 |
.each
1 | [1, 2, 3, 4, 5].each do |num| |
和 for 循环的不同点在于:each 迭代器只维护迭代块内的变量,而 for 循环允许变量存在于块外。
1 | for num in 1...5 |
循环控制语句
break next redo
,前两个对应 C 语言的 break
和 continue
,最后一个将会回到循环的初始状态。
Rails 入门
项目结构
文件(夹) | 作用 |
---|---|
app/ | 包含应用的控制器、模型、视图、辅助方法、邮件程序、频道、作业和静态资源文件。 |
bin/ | 包含用于启动应用的 rails 脚本,以及用于安装、更新、部署或运行应用的其他脚本。 |
config/ | 配置应用的路由、数据库等。 |
config.ru | 基于 Rack 的服务器所需的 Rack 配置,用于启动应用。 |
db/ | 包含当前数据库的模式,以及数据库迁移文件。 |
Gemfile, Gemfile.lock | Gemfile.lock 这两个文件用于指定 Rails 应用所需的 gem 依赖。Bundler gem 需要用到这两个文件。 |
lib/ | 应用的扩展模块。 |
log/ | 日志文件 |
public/ | 仅有的可以直接从外部访问的文件夹,包含静态文件和编译后的静态资源文件。 |
Rakefile | 定位并加载可在命令行中执行的任务。这些任务在 Rails 的各个组件中定义。如果要添加自定义任务,请不要修改 Rakefile,直接把自定义任务保存在 lib/tasks 文件夹中即可。 |
test/ | 单元测试、固件和其他测试装置。 |
tmp/ | 临时文件(如缓存和 PID 文件)。 |
vendor/ | 包含第三方代码,如第三方 gem。 |
启动 Rails
在项目文件夹下运行以下命令:
1 | bin/rails server |
上述命令会启动 Puma,这是 Rails 默认使用的 Web 服务器。要查看运行中的应用,请打开浏览器窗口,访问 http://localhost:3000。