1.1 简介
Ruby语言是由松本行弘(Matz)设计,是一门通用的、面向对象的、解释型语言。
1.2 Ruby?RUBY?ruby?
1.Ruby:用来表示编程的语言
2.ruby:是指一个计算机程序,特指Ruby的解释器
3.RUBY:准确来说没有这种写法,一般是简写,例如WTO.
1.3. 安装方式
方式1 brew
brew install ruby
方式2 rvm
rvm install 2.2.4
更多rvm可以参考:rvm入门篇-安装和使用
1.4 工具
1.irb:交互式Ruby控制台程序。
2.rvm: Ruby Version Manager
3.VSCode
4.gem:一套Ruby库和应用程序包管理实用工具
5.rake:Ruby的make工具,一套任务管理实用工具
6.rdoc和ri:Ruby文档工具
1.5 ruby解释器命令
执行ruby文件
ruby basic.rb
语法检查而不运行程序:
ruby -cw basic.rb
它会读取文件并指出语法是否有错。更多类似-cw的解释器开关参见文末:解释器的命令行开关。
2 Ruby语言基础
2.1 变量
局部变量
局部变量以小写字母或者下划线开头,包含字母、下划线或数字。Ruby不是使用的驼峰命名,而是使用下划线将多个单词拼接。例如:
?first_name
?firstName
实例变量
实例变量通常以一个单独的@开头,后面字符和局部变量命名规则一致。例如:
class Person
def initialize(temp_name,temp_age)
@name = temp_name
end
def printn
return @name
end
end
# 实例变量
p1 = Person.new("zhangsan",24)
p p1.printn
#输出结果为:zhangsan
类变量
类变量命名规则与实例变量一致,但是它以@@符号开头:
class Person
@@person_number = 0
def initialize(temp_name,temp_age)
@name = temp_name
@@person_number = @@person_number + 1
end
def print_person_number
return @@person_number
end
end
# 实例变量
p1 = Person.new("zhangsan",24)
p p1.print_person_number
输出结果:1
全局变量
以$开头,它就是一个全局变量,例如:
$FIRST_NAME $population
2.2 常量
常量以大写字母开头,如果遇到命名多词组合常量,可以使用驼峰命名法,也可以使用下划线分割且所有字母大写。
A String FirstName FIRST_NAME
2.3 方法
方法名
Ruby中的方法名遵从与局部变量相同的规则和约定。例如:
def get_first_name
return @first_name
end
方法调用
方法调用使用.运算符。例如:
p1.get_name #方法调用
p1.name #属性调用
2.4 引用ruby文件
可以使用$:查看加载路径。
这里主要介绍三种引用方式:load、require、require_relative。
load
load命令总是会加载所请求的文件,不论这个文件是否已经加载过。假如一个文件在几次加载过程中发生改变,那么最新版本的文件将优先使用并覆盖之前加载的版本。尤其是在irb会话中,当在编辑器中修改一个文件时,想要立即测试修改的效果,使用load非常有用。
require
经常会使用的一个技术,用于请求Ruby扩展或库,不论是标准库还是三方库。
requrire就算调用多次也不会重新加载已经加载过的文件。Ruby会持续追踪已经被请求的那些文件而不会重复加载它们。
require不能辨识出当前的工作目录(.)。用户可以显式地指定它。例如:
require "./loadee.rb"
or
$: << "." #把当前目录添加到加载路径当中。
require "loadee.rb"
require_relative
这个命令会搜索相对于所在文件的目录来加载功能。这个不用把当前目录添加到加载路径中。
2.5 数据结构
查看某个属性或者变量是什么类型,可以使用.class方法。
2.5.1 字符串
字符串插值:
name = "zhangsan"
age = "20"
person_desc = "my name is #{name},age is #{age}"
puts person_desc
bang方法:
Ruby的方法可以以惊叹号(!)结尾,这样的方法称为bang方法。有惊叹号的方法被标记为危险的。因为他可能会改变原有数据的值。例如:
str = "Hello World"
p str.upcase!
p str
#----------------------
p str.upcase
p str
更多字符串方法参见:https://ruby-doc.org/core-2.2.0/String.html
2.5.2 集合
Set不是Ruby的核心类,它是一个标准库类,所以使用的时候需要require "set"。它的对象是唯一的。
构造一个集合:
require 'set'
s = [1,2,3,4,5,6,7,8,9,124,45,6,4,1]
set = Set.new(s)
p set
集合没有字面构造器。
2.5.3 数组
数组的创建:
#中括号创建
["zhangsan","lisi","wangwu"]
注意%W 和%w的区别:
name = "Tim"
students = %W{zhangsan lisi wangwu #{name}}
students = %w{zhangsan lisi wangwu #{name}}
%w:创建字符串数组的特殊方式
%W:如果想要对字符串进行解析,使用W
数组遍历:
[1,2,3,4,5,8].each {|item| puts item+"!"}
更多数组方法参见:https://docs.ruby-lang.org/en/2.0.0/Array.html
2.5.4 散列
散列在其他语言中有时被称为:字典或者Map。散列由键值组成。例如:
state_hash = {"January" => "Jan","February" => "Feb","March" => "Mar"}
state_hash["April"] = "Apr"
puts state_hash["April"] #Result is Apr
puts state_hash.class #Result is Hash