是一种纯粹的面向对象编程语言。它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年。
puts "hello,word!"
输出:
hello,word!
cclass Player
attr_accessor :name,:age
def initialize(name="姓名",age="年龄")
@name=name
@age=age
end
def show()
puts "实例方法调用......#{@name}"
end
def self.show2
puts "静态方法调用2......#{@name}"
end
end
aa=Player.new()
aa.show()
aa::show()
Player.show2
Player::show2
输出:
实例方法调用…姓名
实例方法调用…姓名
静态方法调用2…
静态方法调用2…
class Player
def initialize(name="default")
@name=name
end
def show()
puts "player:#{@name}"
end
end
aa=Player.new()
aa.show()
bb=Player.new("lisi")
bb.show()
cc=Player.new("wangwu")
cc.show()
输出:
player:default
player:lisi
player:wangwu
注:initialize为构造函数,传入参数默认值为default
class Player
def initialize(name="default")
@name=name
end
def show()
puts "player.................................................:#{@name}"
end
def show2()
end
end
aa=Player.new()
aa.show()
puts Player.instance_methods(false) #列出对象(类)内部的可用方法 ,传false打印自己定义的方法,true为这个类所有的方法
if aa.respond_to?("show") #判断aa对象是否有show方法
aa.send("show") #send执行对象的方法
end
输出:
player…:default
show
show2
player…:default
attr_accessor:定义可存取对象的属性 :name
class Player
attr_accessor :name,:age
def initialize(name="姓名",age="年龄")
@name=name
@age=age
end
def show()
puts "player......#{@name}"
puts "player......#{@age}"
end
end
aa=Player.new()
aa.show()
puts "name is " +aa.respond_to?("name").to_s
puts "age is " +aa.respond_to?("age").to_s
aa.name="王五"
aa.age=18
aa.show()
输出:
player…姓名
player…年龄
name is true
age is true
player…王五
player…18
假设上面未定义age( attr_accessor :name),则输出结果为
player…姓名
player…年龄
name is true
age is false
Traceback (most recent call last):
/Users/yuroupan/RubymineProjects/untitled/.idea/classtest.rb:20:in
age=’ for #
注:引用属性需要加:
games=["绝地求生","死亡大作战","4399"]
puts games
#数组循环
# 方法1:
games.each do |game|
puts "我爱#{game}"
end
#方法2
games.each_with_index do |game,i|
puts "#{i+1}.#{game}" #不+1就是下标从0开始
end
puts games.join(",")
输出:
绝地求生
死亡大作战
4399
我爱绝地求生
我爱死亡大作战
我爱4399
1.绝地求生
2.死亡大作战
3.4399
绝地求生,死亡大作战,4399
puts point >30 ?"MVP":"player"
等价于
```ruby
if point >=30 then
puts "MVP球员"
else
puts "player"
end
a="hello"
b="abc"
puts a+" "+b
a<<b
puts a #相当于a=a+b
puts b
a="A"
puts a*4 #循环输出4个
输出:
hello abc
helloabc
abc
AAAA
单引号:直接输出
双引号:进行运算
puts "我是双引号\n"
puts '我是单引号\n'
puts "#{20+30+40}"
puts '#{20+30+40}'
输出:
我是双引号
我是单引号\n
90
#{20+30+40}
mvp_rank={
"lisi"=>28,
"zhangsan"=>36,
"wangwu"=>98
}
puts mvp_rank
puts mvp_rank["zhangsan"]
#类似JSON的使用
player={
name:"lisa",
age:28,
points:30.3
}
puts player
puts player[:name]+","+player[:age].to_s+","+player[:points].to_s
输出:
{“lisi”=>28, “zhangsan”=>36, “wangwu”=>98}
36
{:name=>“lisa”, :age=>28, :points=>30.3}
lisa,28,30.3
字符to数值 to_i(字符转整数) to_f(字符转小数)
数值to字符 to_s
zhangsan="50"
lisi="29"
wangwu="36"
puts zhangsan+lisi+wangwu
puts zhangsan.to_i+lisi.to_i+wangwu.to_i
puts (zhangsan.to_i+lisi.to_i+wangwu.to_i).to_s+"总分"
puts zhangsan.to_i.to_f
输出:
502936
115
115总分
50.0
class Son < Father
class Father
def initialize(name="姓名",age="年龄")
@name=name
@age=age
end
def show()
puts "父类方法调用......#{@name}"
end
def self.show1
puts "父类静态方法调用2......#{@name}"
end
end
class Son < Father
def show2()
puts "子类方法调用......#{@name}"
end
end
lisi=Father.new("lisi",25)
lisi.show()
zhangsan=Son.new("zhangsan",9)
zhangsan.show2
zhangsan.show
Son.show1
输出:
父类方法调用…lisi
子类方法调用…zhangsan
父类方法调用…zhangsan
父类静态方法调用2…
定义一个类引用这个模块,虽然模块中会有很多方法,但是静态方法类是无法直接使用的,实例方法实例化类后可以使用。
module BaseFunc
Version = "0.0.1"
def v
return Version
end
#普通方法
def add(a,b)
return a+b
end
#静态方法
def self.showversion
return Version
end
#把V方法定义范围静态方法
module_function :v
end
puts BaseFunc::Version
puts BaseFunc::showversion
puts BaseFunc.showversion
puts BaseFunc.v
#定义一个类引用这个模块,虽然模块中会有很多方法,但是静态方法类是无法直接使用的,实例方法实例化类后可以使用
class BaseClass
include BaseFunc
end
puts "-----------------------------"
puts BaseClass::Version
#puts BaseClass.add(10,20) add方法需通过实例化对象来调用
aa=BaseClass.new
puts aa.add(10,20)
#BaseClass.showversion self方法是模块自己的,无法include进类
输出:
0.0.1
0.0.1
0.0.1
0.0.1
0.0.1
30
#1.if else
#2.unless使用
price = 40
unless price < 50
puts "aaa"
else
puts "bbb"
end
#3case...when使用
week_day = 0
case week_day
when 0,7
puts "星期一"
when 1
puts "星期一"
when 2
puts "星期二"
when 3
puts "星期三"
when 4
puts "星期四"
when 5
puts "星期五"
when 6
puts "星期六"
when 7
puts "星期七"
else
raise Exception.new("没这天")
end
输出:
bbb
星期一
#1.数组循环输出
gamelist=["aaa","bbb","ccc"]
for game in gamelist do
puts game
end
#2.循环1-4
for num in 1...5 do
puts num
end
#3.循环1-5
for num in 1..5 do
puts num
end
#4.while 循环
index=0
while index < 5 do
puts "while.index=" + index.to_s
index+=1
end
#5.until
index=0
until index == 5 do
puts "until.index="+ index.to_s
index+=1
end
输出:
aaa
bbb
ccc
1
2
3
4
1
2
3
4
5
while.index=0
while.index=1
while.index=2
while.index=3
while.index=4
until.index=0
until.index=1
until.index=2
until.index=3
until.index=4
#1.each循环
gamelist=["aaa","bbb","ccc"]
gamelist.each {|game|
puts game
}
gamelist.each do |game|
puts game
end
gamelist.each_with_index do |game,i|
puts i.to_s + "." +game
end
#2.times循环
5.times do |i|
puts "第 #{i+1} 次times循环"
end
#3.step 循环 从1开始到10,每次增加3
1.step(10,3) do |i|
puts "#{i}"
end
# 4.uoto
2.upto(5) do |i|
puts "upto= " + i.to_s
end
# 5.downto
5.downto(2) do |i|
puts "downto= " + i.to_s
end
输出:
aaa
bbb
ccc
aaa
bbb
ccc
0.aaa
1.bbb
2.ccc
第 1 次times循环
第 2 次times循环
第 3 次times循环
第 4 次times循环
第 5 次times循环
1
4
7
10
upto= 2
upto= 3
upto= 4
upto= 5
downto= 5
downto= 4
downto= 3
downto= 2
begin…rescue…ensure…end
类似try…catch…finally
begin
#可能会发生错误的处理(try)
puts "处理开始。。。"
10/0
rescue => e
#错误发生时(catch)
puts "错误发生!!!"
puts e
else
puts "正常处理。。。"
ensure
#最后处理,无论是否发生处理事件均输出(finally)
puts "最后的扫尾工作。。。"
end
输出:
处理开始。。。
错误发生!!!
divided by 0
最后的扫尾工作。。。