Ruby是一种脚本语言,Cocoapods就是使用Ruby开发的。在iOS开发中,掌握Ruby对于项目工程化,自动化很有帮助。
终端运行方式
运行Ruby最常见的两种方式是ruby命令和irb命令:
- ruby命令方式:创建
test.rb文件,在终端输入ruby test.rb就会执行该文件中的代码了。 - irb命令方式:在终端输入
irb,然后按回车键,出现irb(main):001:0>及可输入ruby代码了,按回车键执行,Ctrl + d退出。如果无法输入中文,重新打开终端后,输入irb --noreadline。
集成开发环境(IDE)
1. VSCode
下载Visual Studio Code, 安装Code runner extension插件。运行方式有两种:
CTRL+ALT+NCmd+Shift+p, 输入Run By language, 再输入Ruby即可运行
2. RubyMine
RubyMine地址:www.jetbrains.com/ruby/。25元获取RubyMine官方账号:taojingling.cn/Jet/account…。运行方式如下图:
创建test.rb文件,编写好代码。确认编号2处是要运行Ruby文件,点击编号3处的运行就可以了,编号4处是输出的结果。使用RubyMine有很多方便之处,比如可以自定义工作目录,设置好环境变量等等。下图就是自定义工作目录的方法,右键->More Run/Debug->Modify Run Configuration就会显示下图对话框:
Ruby编码设置
使用# encoding:来指定编码,如:# encoding: ASCII, # encoding: UTF-8,UTF-8在Windows下对应GBK:
# encoding: UTF-8
注释
注释有两种:#开头会注释一行,注释多行用=begin和=end:
# 注释一行
=begin
注释多行
注释多行
注释多行
=end
变量
Ruby 支持五种类型的变量。
- 一般小写字母、下划线开头:变量(Variable)。
$开头:全局变量(Global variable)。@开头:实例变量(Instance variable)。@@开头:类变量(Class variable)类变量被共享在整个继承链中。- 大写字母开头:常数(Constant)。
全局变量
#!/usr/bin/ruby
# encoding: UTF-8
$global_variable = 10
class Class1
def print_global
puts "全局变量在 Class1 中输出为 #$global_variable"
end
end
class Class2
def print_global
puts "全局变量在 Class2 中输出为 #$global_variable"
end
end
class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global
实例变量
实例变量以 @ 开头。未初始化的实例变量的值为 nil,在使用 -w 选项后,会产生警告。
#!/usr/bin/ruby
class Customer
def initialize(id, name, addr)
@cust_id=id
@cust_name=name
@cust_addr=addr
end
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
end
# 创建对象
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
# 调用方法
cust1.display_details()
cust2.display_details()
类变量
类变量以 @@ 开头,且必须初始化后才能在方法定义中使用。
引用一个未初始化的类变量会产生错误。类变量在定义它的类或模块的子类或子模块中可共享使用。
在使用 -w 选项后,重载类变量会产生警告。
#!/usr/bin/ruby
class Customer
@@no_of_customers=0
def initialize(id, name, addr)
@cust_id=id
@cust_name=name
@cust_addr=addr
end
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
def total_no_of_customers()
@@no_of_customers += 1
puts "Total number of customers: #@@no_of_customers"
end
end
# 创建对象
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
# 调用方法
cust1.total_no_of_customers()
cust2.total_no_of_customers()
Ruby 局部变量
局部变量以小写字母或下划线 _ 开头。局部变量的作用域从 class、module、def 或 do 到相对应的结尾或者从左大括号到右大括号 {}。
当调用一个未初始化的局部变量时,它被解释为调用一个不带参数的方法。
对未初始化的局部变量赋值也可以当作是变量声明。变量会一直存在,直到当前域结束为止。局部变量的生命周期在 Ruby 解析程序时确定。
Ruby 常量
常量以大写字母开头。定义在类或模块内的常量可以从类或模块的内部访问,定义在类或模块外的常量可以被全局访问。
常量不能定义在方法内。引用一个未初始化的常量会产生错误。对已经初始化的常量赋值会产生警告。
#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
class Example
VAR1 = 100
VAR2 = 200
def show
puts "第一个常量的值为 #{VAR1}"
puts "第二个常量的值为 #{VAR2}"
end
end
# 创建对象
object=Example.new()
object.show
伪变量
它们是特殊的变量,有着局部变量的外观,但行为却像常量。您不能给这些变量赋任何值。
self当前方法的接收器对象。true代表 true 的值。false代表 false 的值。nil代表 undefined 的值。__FILE__当前源文件的名称。__LINE__当前行在源文件中的编号。
字符串
字符串打印
字符串用双引号或单引号表示,如"hello ruby!\n",\n代表换行。单引号表示的话,\n字符不会转译,会直接输出:
字符串中传递参数
使用#{}包裹参数名:
A = 100
print("Hello Ruby! #{A}\n")
方法的声明和调用
声明
方法以do开头,end结尾,也可以用{}代替。一般一行代码使用{和},多行使用do end:
require "fileutils"
$success_file_name = "successLog.txt"
$fail_file_name = "failLog.txt"
def write_log(fail, success)
if success != 0
file = File.new($success_file_name, "a")
file.syswrite("#{success}\n")
end
if fail != 0
file = File.new($fail_file_name, "a")
file.syswrite("#{fail}\n")
end
end
调用
Ruby在方法调用时,()可以省略,如上边提到的print ("hello,ruby!\n")就可以写成print "hello,ruby!\n"。print就是要方法,字符串"hello,ruby!\n"是参数。
打印(输出方法)
方法还有puts和p,前者会自动在打印后换行。后者用来区分数值和字符串,并且不会转译,会返回输出结果:
条件判断
Ruby中使用true和false来表示真假,另外nil也表示假。除false和nil外都为真。
条件判断中,经常会用到逻辑运算符:&&和||。
判断对象是否是同一个对象用equal?方法,判断对象的值是否相等用eql?。
按照Ruby的开发习惯,返回true或false的方法名都以?结尾。
Ruby中常见的条件判断包括:if语句,case语句,unless语句。如下:
# encoding: UTF-8
a = 1
b = 2
if a > b then
p "a大于b"
elsif a == b then
p "a等于b"
else
p "a小于b"
end
case a
when 1 then
p "a等于1"
when 2 then
p "a等于2"
else
p "a不等于1且不等于2"
end
unless a > b then
p "a大于b"
else
p "a小于或等于b"
end
then可以忽略
循环
常用循环有for,while和times循环:
a = [1, 2, 3, 4, 5]
for num in a do
print num #==> 12345
end
i = 0
while i < 10
print i #==> 0123456789
i += 1
end
3.times do
print "test" #==> testtesttest
end
break, next, redo语句用在循环中。break结束循环,next跳过本次循环,redo重复上次循环。redo基本用不上:
array = [1, 2, 3, 4, 5]
array.each do |num|
if num == 3
break
end
print num
end
#==> 12
array = [1, 2, 3, 4, 5]
array.each do |num|
if num == 3
next
end
print num
end
#==> 1245
对象
Ruby中所有数据都是对象,如数值对象,字符串对象,数组对象,散列对象,正则表达式对象,文件对象,符号对象。
而类就是对象的种类,反过来,对象就是类的实例。比如数值对象就是Numeric的实例。
环境变量
Unix中,使用 env 命令来查看所有环境变量的列表: