符號 | 做用 |
---|---|
-c | 檢查代碼正確性 |
-w | 警告模式運行 |
-e | 字面腳本 |
-l | 行模式運行 |
單獨php
ruby -c Hello.rb
組合正則表達式
ruby -le 'print "Hello";print "Ruby"'
一般以首字母大寫或所有大寫爲常量。api
CON1=1000
puts "I got"+CON1.to_s+"RMByuan"
CON1=100 #不報錯可是給出警告
puts "Now only"+CON1.to_s+"yuan"
在類,模塊,方法這些做用域裏面有效。下劃線_,a-z開頭。數組
做用於全局。以$開頭
Ruby自帶全局變量:ruby
全局變量 | 說明 |
---|---|
$0 | Ruby腳本文件名 |
$* | 命令行參數 |
$= | 是否區分大小寫 |
$_ | 最近讀的字串 |
兩種整形Fixnum,Bignum,一種Float型,數據類型也是對象。用.class
來查看當前變量的數據類型。markdown
i=2**30 #基本數據類型也是一個對象
k=2**30-1
puts "i="+i.to_s+"類型是"+i.class.to_s #.class能夠獲得該數值的類型
puts "k="+k.to_s+"類型是"+k.class.to_s
f=3.1415
puts "f="+f.to_s+"類型是"+f.class.to_s
i=1073741824類型是Bignum
k=1073741823類型是Fixnum
f=3.1415類型是Floatless
用===
來判斷右邊對象是否在左邊對象裏面函數
#..與...的區別
a=1..5
b=1...5
print "a的元素是"
a.each do|i|
print i.to_s
end
puts "\n",a===5
print "b的元素是"
b.each do|i|
print i.to_s
end
puts "\n",b===5
a的元素是12345
true
b的元素是1234
falseui
經常使用方法:spa
方法 | 說明 |
---|---|
to_a |
轉換成一個數組 |
include?() 或者 === |
是否包含 |
min() begin() firsst() |
最小值 |
max() end() last() |
最大值 |
經常使用迭代器
迭代器 | 說明 |
---|---|
regect |
轉爲數組,刪除知足條件元素 |
select |
轉爲數組,選擇知足條件元素 |
each |
輸出迭代範圍中每一個元素 |
其中each最爲經常使用,演示以下
a=1..10
a.each do|i|
print i.to_s+" "
end
1 2 3 4 5 6 7 8 9 10
符號對象是 字符串,方法,類,或者標識符的內部表示形式。
用:
或者 %{}
建立符號對象
str1="good morning"
sym1=:"good morning"
puts str1==sym1 #比較對象
puts str1.to_sym==sym1 #字符串轉成符號後比較內容
puts sym1.to_s==str1 #符號轉成字符串後比較內容
false
true
true
%
, 乘方 **
其餘:+,-,*,/
=,+=,-=,#=,/=,%=,**=
位運算符 | 說明 | 位運算符 | 說明 |
---|---|---|---|
& | 按位 與 | << | 向左移位 |
>> | 按位 或 | >> | 向右移位 |
~ | 按位非 | ^ | 異或 |
4. 比較運算
運算符 | 說明 | 運算符 | 說明 |
---|---|---|---|
!= | 不等於 | =~ | 正則表達式匹配 |
<=> | 比較兩對象結果1,0,-1 |
!~ | 正則表達式不匹配 |
5. 邏輯運算
邏輯運算符 | 含義 |
---|---|
&& | 邏輯「且」 |
|| | 邏輯「或」 |
! | 邏輯「非」 |
6. 三目運算符
score<600? "仍需努力":"考上覆旦沒問題"
if(條件) then
代碼塊
elsif(條件)
代碼塊
else
代碼塊
end
if
對應的是elsif
而不是elseif.
能夠省略then
關鍵字
unless與if相反,unless後面的語句結果是true時執行 第二個代碼塊,不然執行第一個代碼塊
unless(條件) then
代碼塊1
else
代碼塊2
end
case 表達式
when 常量1,常量2...常量3 then
代碼塊1
when 常量n.. then
代碼塊2
else 代碼塊3
when 後面能夠是Range對象。
將表達式的值與常量進行比較須要用===
而不是==
while循環:
while (條件) do
代碼塊
end
until循環:
until (條件) do#條件表達式爲false代碼塊被執行
代碼塊
end
for…in語句主要用於 數組 和Hash對象
for 自定義名稱 in Array|Hash do
代碼塊1
end
迭代器
Array.each do|定義的變量名|
代碼塊
end
break
next
return
雙引號的字符串,與單引號的字符串
strd="good\nmorning"
strs='good\n morning'
puts strd
puts strs
運行結果:
good
morning
good\n morning
轉義字符與特殊字符
字符串 | 含義 |
---|---|
\a | Bell對應符號 |
\nnn | nnn 是八進制數,替換成字符 |
\b | 退格 |
\xnn | xnn 是十六進制數,替換成字符 |
\e | esc 鍵的字符 |
\cx | ctrl+X 對應字符,x能夠是任意對應字符 |
\C-x | 同上 |
\n | 換行 |
\M-x | Alt+x 對應字符,x能夠是任意對應字符 |
\r | 回車 |
\M-\C-x | ctrl+alt+x ,x任意鍵 |
\s | 空白符 |
\t | Tab 鍵對應字符 |
\v | 垂直Tab 鍵對應字符 |
#{} | 替換成變量或者表達式所對應的值 |
用+
符號合併
a="個人名字是"
b="Philippian"
c=a+b
puts c
個人名字是Philippian
用<<
合併
a="個人名字是"
b="Philippian"
a<<b
puts a
個人名字是Philippian
替換replace
方法
str="hehe"
puts "替換前是"+str
str.replace("呵呵噠")
puts "替換後是"+str
替換前是hehe
替換後是呵呵噠
複製 dup
clone
方法
dup
只複製內容,clone
複製其特殊方法,taint,freeze等信息
str="Philippian"
puts str.dup
puts str.clone
Philippian
Philippian
改變 有多種方法,以下:
方法 | 說明 | 方法 | 說明 |
---|---|---|---|
capitalize | 首字母大寫 | Rstrip | 去掉右邊空格 |
reverse | 字符反轉 | Lstrip | 去掉左邊空格 |
chomp | 去掉最後換行符 | upcase | 大寫 |
Chop | 山區最後字符 | downcase | 小寫 |
swapcase | 大小寫轉換 |
str="Philippian"
puts "第二個字符爲"+str[1]
puts "二到六字符爲"+str[1..5]
puts "第二個字符的ASCII值是"+str[1].ord.to_s
puts "從第5個字符開始日後的三個字符"+str[4,3]
第二個字符爲h
二到六字符爲hilip
第二個字符的ASCII值是104
從第5個字符開始日後的三個字符ipp
a=String.new
a="good"
b=a #a b指向同一內存
c="good" #c與ab不一樣
puts a==b #ab內容相同
puts a.eql?b #ab內容相同
puts a==c #ac內容相同
puts a.eql?c #ac內容相同
puts a.equal?c #ac不是同一對象
puts a.equal?b #ab是同一對象
true
true
true
true
false
true
比較大小
使用<=>
符號比較字符串大小,表達式的結果和含義以下:
結果 | 含義 |
---|---|
-1 | 右邊字符串大 |
0 | 相同 |
1 | 左邊字符串大 |
建立Hash對象。形式爲 key=>value
student={
"num"=>"11001101110"
"name"=>"Philippian"
"sex"=>"m"
"major"=>"computer science"
}
或者:
student=Hash.new
student["num"]="11001101110"
student["name"]="Philippian"
經常使用方法:
方法 | 說明 |
---|---|
size() length() | Hash對象長度 |
include?(key) has_key?(key) | 是否包含某個key |
delete(key) | 刪除指定元素 |
keys() | 獲得所有key組成的數組 |
values() | 獲得所有value組成的數組 |
迭代器
迭代方法 | 說明 |
---|---|
each | 輸出所有元素 key和value |
each_key | 輸出全部key |
each_value | 輸出全部value |
each_pair | 輸出全部key-value對 |
兩種方式建立數組:
1
stu_name=["小明","小強","小剛","小紅","小芳"]
2
stu_name=Array.new
stu_name[0]="小明"
stu_name[1]="小強"
取元素:
stu_name=["小明","小強","小剛","小紅","小芳"]
puts stu_name[-2] #倒數第二個
puts stu_name[2] #正數第三個
小紅
小剛
增刪元素
方法 | 說明 |
---|---|
unshift() | 頭部添加數組元素 |
push() | 尾部添加數組元素 |
<< | 尾部添加一個數組元素 |
shift() | 頭部刪除 |
pop() | 尾部刪除 |
組合與截取
stu_name1=["小明","小強","小剛"]
stu_name2=["小紅","小芳"]
stu_name1.concat(stu_name2) #將第二個數組加到第一個裏面
puts stu_name1
puts "------"
puts stu_name1[2..4] #截取第三個到第五個
小明
小強
小剛
小紅
小芳
——
小剛
小紅
小芳
注意:
1. 類的定義
2. 表達式的執行
3. 方法定義
4. self
關鍵字
5. 建立對象
6. 對象調用方法
class Man #類的名字首字母大寫
puts "I am a man" #表達式直接執行
puts self.class #self關鍵字指本身,此時self爲類
def sayName name #定義方法,方法名後面是參數
puts "my name is "+name.to_s
puts self.class
#self關鍵字指本身,此時爲Man建立的對象
end
end
stu1=Man.new #建立對象
stu1.sayName("Philippian") #調用方法
I am a man
Class
my name is Philippian
Man
名字相同的類自動合併
class Student
def sayName name
puts "my name is "+name
end
end
class Student
def sayAge age
puts "my age is "+age.to_s
end
end
Phi=Student.new
Phi.sayAge 18
Phi.sayName "Philippian"
my age is 18
my name is Philippian
也叫內部類,使用內部類用::
class Student
def sayName name
puts "My name is "+name
end
class Homework
def doHomework
puts "I did my Homework"
end
end
end
he=Student.new
he.sayName "Philippian"
math=Student::Homework.new
math.doHomework
My name is Philippian
I did my Homework
專門爲某個對象添加的類
class Student
def sayName name
puts "My name is "+name
end
end
he=Student.new
he.sayName "Philippian"
class << he #特殊類
def singSong song_name
puts "I sang a song, its name is "+song_name
end
end
he.singSong "我有一隻小毛驢"
My name is Philippian
I sang a song, its name is 我有一隻小毛驢
class Student
def saySomething sentences="I am a Student" #設置默認參數的值
puts sentences
end
end
he=Student.new
he.saySomething #沒有參數時候
he.saySomething "I want to have a holiday!" #有的參數值時候
I am a Student
I want to have a holiday!
class Xiaoming
def sayName
"Xiaoming"
end
def sayAge
return 19
end
end
xiaoming=Xiaoming.new
puts xiaoming.sayName
puts xiaoming.sayAge.to_s
Xiaoming
19
class Student
def sayName name
puts "My name is "+name
end
end
he=Student.new
he.sayName "Philippian"
def he.sayAge age #特殊方法
puts "My age is "+age.to_s
end
he.sayAge 18
Xiaoming
19
class Student
def Student.sayClass
puts self.class
end
end
Student.sayClass
Class
構造方法名字爲initialize
,當調用new方法建立對象的時候,自動調用initialize
初始化
class Student
def initialize name,age
@name=name
@age=age
end
def show
puts "My name is #{@name}, My age is #{@age}"
end
end
he=Student.new "Philippian",19
he.show
My name is Philippian, My age is 19
實例變量用於在類內部共享數據。 變量名以@
開頭。
能夠在如下幾個地方聲明實例變量:
定義位置 | 做用域 |
---|---|
頂層 | 頂層表達式和頂層函數 |
類、模塊 | 當前類,當前模塊 |
類方法 | 當前類下全部方法 |
類變量用於在各個類之間共享數據。容許定義位置與實例變量相同
類變量以@@
開頭
屬性設置器和讀取器
class Student
@university
def setUniversity=(val)
@university=val
end
def university
@university
end
end
he=Student.new
he.setUniversity="SYSU"
puts he.university
SYSU
聲明屬性的標識符
標識符 | 示例 | 說明 |
---|---|---|
attr | attr:attr1,key |
key值false時爲只讀 |
attr_reader | attr_reader: attr1,attr2 |
一個或多個只讀屬性 |
attr_writer | attr_writer: attr1,attr2 |
一個或多個 只寫屬性 |
attr_accessor | attr_accessor: attr1,attr2 |
一個或多個可讀寫屬性 |
class Animal
def eat
puts "I can eat"
end
def breathe
puts "I can breathe"
end
end
class Dog<Animal #繼承
def run #Dog類本身的方法
puts "I am a dog, I can run"
end
def eat #重寫父類的方法
puts "I am a dog, I like eating bone"
end
end
wangwang=Dog.new
wangwang.eat
wangwang.breathe
wangwang.run
I am a dog, I like eating bone
I can breathe
I am a dog, I can run
訪問父類構造方法
class Student
def initialize (name, age)
@name=name
@age=age
end
def saySomething
puts "I can say something"
end
end
class UniversityStudent<Student
def initialize stu_num
@stu_num=stu_num
super("Philippian", 18) #super關鍵字訪問父類構造方法
end
def show
puts "My name is #{@name}, my age is#{@age}, \nmy student numbe is #{@stu_num}"
end
end
he=UniversityStudent.new 1111111111
he.saySomething
he.show
I can say something
My name is Philippian, my age is18,
my student numbe is 1111111111
訪問保護 | 名稱 | 說明 |
---|---|---|
private | 私有方法 | 方法指定成員只能被類內部訪問,對類外部不可見 |
protected | 保護方法 | 能夠被隸屬的子類訪問 |
public | 共有方法 | 沒有訪問限制 |
兩種方法定義訪問級別
1. 使用無參數的方法
class Animal
def eat #默認public
puts "I can eat"
end
public #定義爲公有方法
def drink
puts "I can drink"
end
private #定義爲私有方法
def breathe
puts "I can breathe"
end
protected #定義爲保護方法
def run
puts "I can run"
end
end
‘2. 使用參數指定成員
class Animal
def eat
puts "I can eat"
end
def run
puts "I can run"
end
def breathe
puts "I can breathe"
end
private(:eat) #定義爲私有方法
protected(:breathe,:run)#定義爲保護方法
end
用{ }
或者 do...end
建立代碼塊,用yield
傳入代碼塊
def saySomething
puts "This is the 1st in method"
yield
puts "This is the 2nd in method"
end
saySomething do
puts "This is in a block"
end
saySomething{
puts "This is in a block too"
}
This is the 1st in method
This is in a block
This is the 2nd in method
This is the 1st in method
This is in a block too
This is the 2nd in method
此外,代碼塊還能夠有參數、返回值等。