Ruby 快速上手

安装 Ruby

官网 下载安装包然后安装。如果使用多个版本的 Ruby,可以考虑 RVM

安装好之后,在命令行输入以下命令,有输出就代表一切正常。

1
2
3
4
5
6
7
8
9
10
11
12
ruby -v

# 使用 RVM 可以用以下命令

# 设置为系统默认版本
rvm use --default 2.2.3

# 在其他版本之前切换
rvm use 2.2.1

# 卸载一个指定版本
rvm uninstall 2.2.1

当安装完 ruby 后,打开命令行输入 irb,即可进入 irb 运行环境。这就像输入 node 进入 node 运行环境,输入 python 进入 python 运行环境。

gems

RubyGems 是 Ruby 项目的包管理工具。Ruby 自带 gem,好比 nodejs 自带 npm。

常用的 Gems 命令:

1
2
3
4
5
6
7
8
# 查看所有的包
gem list

gem install <package-name>
gem uninstall <package-name>

# 查看当前镜像
gem sources

bundle

当你配置好 ruby 环境后,我们需要根据已有的项目文件配置项目环境,安装依赖包。

和 nodejs 一样,ruby 的依赖信息存放于项目根目录下的 Gemfile 和 Gemfile.lock 文件里。

不同的是,我们需要用 bundle install 来安装依赖包(蠢得不行)。如果 bundle 的安装卡住了,可以考虑使用 bundle install --verbose 来查看安装过程。

Ruby 基本语法

ruby 和 python 一样,是一个解释型语言、弱类型语言,因此 ruby 的代码运行只需要指定解释器即可。

变量

命名规则

“$” 开头的变量:全局变量

“@” 开头的变量:实例变量

“@@” 开头的变量:类变量

小写字母或者下划线开头的变量:局部变量

赋值

没有什么特别的。只需要注意赋值语句的返回值是被赋值对象的值。也就是说,下面的语句是可行的。

1
x = y = 114514

算数操作

ruby 支持大部分常见的算数操作,也可以重载这些操作。

1
2
3
4
5
6
a + b
a - b
a * b
a ** b # 乘方,注意 b 不一定是整数。也就是说 2 ** 0.5 是可以返回 1.414 的。
a / b
a % b

注释

1
2
3
4
5
6
7
8
9
10
11
12
# 这是单行注释

=begin






=end

codes

Here Document

鸡肋中的鸡肋。

“Here Document” 是指建立多行字符串。在 << 之后,可以指定一个字符串或标识符来终止字符串,且当前行之后直到终止符为止的所有行是字符串的值。

如果终止符用引号括起,引号的类型决定了面向行的字符串类型。请注意 << 和终止符之间必须没有空格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
print <<EOF
这是第一种方式创建here document 。
多行字符串。
EOF

print <<"EOF";
这是第二种方式创建here document 。
双引号代表多行字符串。
EOF

print <<`EOC`
echo hi there
echo lo there
EOC # 反引号代表作为命令解释

print <<"foo", <<"bar"
I said foo.
foo
I said bar.
bar # 可以嵌套使用

BEGIN 语句

1
2
3
BEGIN {
codes
}

BEGIN 中的语句会在程序运行前被调用。

END 语句

1
2
3
END {
codes
}

END 中的语句会在程序结束时被调用。

函数

常用函数

1
2
3
4
5
puts "a"
# 输出字母 a,同时换行。

print 'a'
# 输出字母 a,不换行。

数据类型

空指针

不是 null 而是 nil

字符串

双引号标记的字符串允许替换和使用反斜线符号,单引号标记的字符串不允许替换,且只允许使用 \\ 和 \‘ 两个反斜线符号。

在双引号标记的字符串里,可以使用 #{expr} 将 expr 的值带入字符串中。

1
2
puts 'abc "\\"' # abc "\"
puts "#{1*2}" # 2

数组

数组字面量通过 [] 定义,且支持 range 定义。尾部的逗号会被忽略。

  • 数组通过 [index] 索引访问
  • 通过赋值操作插入、删除、替换元素
  • 通过 +、- 号进行合并和删除元素(集合做为新集合出现,也就是说集合是不可变对象
  • 通过 << 号向原数据追加元素
  • 通过 * 号重复数组元素
  • 通过|和&符号做并集和交集操作

集合

在大括号内放置一系列 键值对,键值之间使用逗号和序列 => 分隔。尾部的逗号会被忽略。

1
number = {1 => 'one', 2 => 'two', }

范围 Range

一个范围表示一个区间。范围是通过设置一个开始值和一个结束值来表示。范围可使用 s..es...e 来构造,或者通过 Range.new 来构造。

使用 .. 构造的范围从开始值运行到结束值(包含结束值)。使用 … 构造的范围从开始值运行到结束值(不包含结束值)。

1
2
3
4
5
(1..2).each do |n|
print n
end

# 得到 12

可以使用 range.to_a 将范围转换为数组

1
2
3
4
5
6
$, =", " # Array 值分隔符
range1 = (1..10).to_a
range2 = ('bar'..'bat').to_a

puts "#{range1}" # 得到 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
puts "#{range2}" # 得到 ["bar", "bas", "bat"]

范围也可以用作条件表达式和检查指定值是否在指定的范围内。

1
2
3
4
5
if ((1..10) === 5)
puts "5 在 (1..10)"
end

# 得到 5 在 (1..10)

控制流

条件语句

通过 if-else 做条件判断。

1
2
3
4
5
if 2 > 1
puts "2 大于 1"
else
puts "2 小于 1"
end

注意,Ruby 的 else if 语句简写为 elsif,不是 elseif 也不是 elif!!!

1
2
3
4
5
6
7
if 2 > 1
puts "2 大于 1"
elsif 2 < 1
puts "2 小于 1"
else
puts "2 等于 1"
end

和 Python 一样,Ruby 支持倒装语句。

1
2
3
4
5
def hey_ho?
true
end

puts "let's go" if hey_ho?

循环

while

自行体会:

1
2
3
4
5
6
num = 1

while num <= 10
puts num
num += 1
end

for

将变量 num 传递给块,for 语句将迭代它。

1
2
3
for num in 1...10
puts num
end

.each

1
2
3
[1, 2, 3, 4, 5].each do |num|
puts num
end

和 for 循环的不同点在于:each 迭代器只维护迭代块内的变量,而 for 循环允许变量存在于块外。

1
2
3
4
5
6
7
8
9
10
11
12
for num in 1...5
puts num
end

puts num # => 5

# each iterator
[1, 2, 3, 4, 5].each do |num|
puts num
end

put num # => undefined local variable or method `num' for main:Object (NameError)

循环控制语句

break next redo,前两个对应 C 语言的 breakcontinue,最后一个将会回到循环的初始状态。

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。