Ruby 基本知识

    Ruby & Rails

Ruby 安装

在 Mac 电脑上,虽然安装好 Xcode 会自带 Ruby ,不过人们通常还是使用 RVM - Ruby Version Manager 来管理 Ruby 的各种版本

## 安装 RVM - Ruby Version Manager 用来管理 Ruby 的版本
$ \curl -sSL https://get.rvm.io | bash -s stable
$ source ~/.rvm/scripts/rvm    ## 安装完 rvm 会提示使用该命令来让 rvm 生效 

## 安装所需版本的 Ruby - 以 2.3.1 版本为例
$ rvm install 2.3.1
$ rvm list                ## 该命令可查看本地存在的所有 Ruby 的版本
$ rvm use 2.3.1 --default ## 该命令用于设置默认的 Ruby 版本

$ gem update --system     ## 用于救回安装 rvm 过程中网络等原因造成的中断失败
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/  #设置新的 gem 的来源网站

IRB - Interactive Ruby Shell

IRB 一般用于测试 Ruby 的语法
安装完某个版本的 Ruby 后,打开 Mac 电脑上的 Terminal.app(终端)输入指令 irb 就可以体验 Ruby 了,有兴趣可到 Try Ruby 感受更多操作

## 进入 Interactive Ruby
$ irb 
2.3.1 :001 >

计算和赋值

## 在 irb 使用 Ruby 编程 - 计算和赋值
$ irb 
2.3.1 :001 > 3+9
 => 12 
2.3.1 :002 > 1024/8
 => 128 
2.3.1 :003 > my_var=29
 => 29 
2.3.1 :004 > my_var=my_var+2
 => 31 
2.3.1 :005 > my_var=my_var/2
 => 15 
2.3.1 :006 > my_var=my_var/2.0
 => 7.5

数组 - Array

2.3.1 :007 > fruits = ["kiwi", "strawberry", "plum"]
 => ["kiwi", "strawberry", "plum"] 
2.3.1 :008 > fruits = fruits + ["orange"]
 => ["kiwi", "strawberry", "plum", "orange"] 
2.3.1 :009 > fruits = fruits + ["kiwi"]
 => ["kiwi", "strawberry", "plum", "orange", "kiwi"] 
2.3.1 :010 > fruits = fruits - ["kiwi"]
 => ["strawberry", "plum", "orange"]

PS:可以观察到 Ruby 里数组的特点:后进的排后面;一删删全部等等

## 数组的一些常用操作
> [1,2,3] & [2,3,4] & [0,2,6]   ## 多个数组求并集(intersection)
 => [2]

类 - Class

Ruby 里常见的类有:FixnumStringArray 等等,可以通过使用 .class 的方式查看某种数据的类

2.3.1 :011 > 29.class
 => Fixnum 
2.3.1 :012 > "Twentynight".class
 => String 
2.3.1 :013 > fruits.class
 => Array

方法 - Methods

Ruby 里每个(Class)都包含多种方法(Methods),可用 .[方法] 的方式调用

2.3.1 :014 > fruits
 => ["strawberry", "plum", "orange"]
2.3.1 :015 > fruits.length
 => 3 
2.3.1 :016 > fruits.first
 => "strawberry"

还可以使用 .methods 的方式查看该所包含的方法,而由于输出结果的类型属于数组(Array),所以可以进一步使用 .methods.sort 对结果排序

2.3.1 :017 > fruits.methods
 => [:fill, :assoc, :rassoc, ... , :instance_exec, :__id__]
2.3.1 :018 > fruits.methods.sort
 => [:!, :!=, :!~, :&, ... , :values_at, :zip, :|]

此外,也可以自行定义方法(Methods)

2.3.1 :019 > def pluralize(word)
2.3.1 :020?>   word + "s"
2.3.1 :021?>   end
 => :pluralize 
2.3.1 :022 > pluralize("apple")
 => "apples"

注:
面向对象的语言里所谓的方法(Methods)其实就是函数式语言里的函数(Function)


循环 - Loops

2.3.1 :023 > fruits.each do |fruit|
2.3.1 :024 >     puts fruit
2.3.1 :025?>   end
strawberry
plum
orange
 => ["strawberry", "plum", "orange"]
## 带索引(index)的循环
> fruits.each_with_index do |fruit, index|
>   puts fruit
>   puts index
> end
strawberry
0
plum
1
orange
2
 => ["strawberry", "plum", "orange"]

条件 - Conditional

2.3.1 :027 > if my_var > 1.0
2.3.1 :028?>   puts "BigOne"
2.3.1 :029?>   end
BigOne
 => nil 
2.3.1 :030 > if my_var < 1.0
2.3.1 :031?>   puts "OTCBTC"
2.3.1 :032?>   end
 => nil

退出 IRB

2.3.1 :033 > exit
$

打赏