1. Ruby基礎知識

1. Ruby執行選項

符號 做用
-c 檢查代碼正確性
-w 警告模式運行
-e 字面腳本
-l 行模式運行

單獨php

ruby -c Hello.rb

組合正則表達式

ruby -le 'print "Hello";print "Ruby"'

2. 常量,變量

2.1 常量

一般以首字母大寫或所有大寫爲常量。api

CON1=1000
puts "I got"+CON1.to_s+"RMByuan"
CON1=100 #不報錯可是給出警告
puts "Now only"+CON1.to_s+"yuan"

2.2 變量

2.2.1 局部變量

類,模塊,方法這些做用域裏面有效。下劃線_,a-z開頭。數組

2.2.2 全局變量

做用於全局。以$開頭
Ruby自帶全局變量:ruby

全局變量 說明
$0 Ruby腳本文件名
$* 命令行參數
$= 是否區分大小寫
$_ 最近讀的字串

3. 數據類型

3.1 數值

兩種整形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

3.2 範圍

=== 來判斷右邊對象是否在左邊對象裏面函數

#..與...的區別
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

3.3 符號

符號對象是 字符串,方法,類,或者標識符的內部表示形式。
:或者 %{} 建立符號對象

str1="good morning"
sym1=:"good morning"
puts str1==sym1 #比較對象
puts str1.to_sym==sym1 #字符串轉成符號後比較內容
puts sym1.to_s==str1 #符號轉成字符串後比較內容

false
true
true

4. 運算符

  1. 基本:求餘 % , 乘方 ** 其餘:+,-,*,/
  2. 賦值運算:=,+=,-=,#=,/=,%=,**=
  3. 位運算符:
位運算符 說明 位運算符 說明
& 按位 與 << 向左移位
>> 按位 或 >> 向右移位
~ 按位非 ^ 異或

4. 比較運算

運算符 說明 運算符 說明
!= 不等於 =~ 正則表達式匹配
<=> 比較兩對象結果1,0,-1 !~ 正則表達式不匹配

5. 邏輯運算

邏輯運算符 含義
&& 邏輯「且」
|| 邏輯「或」
邏輯「非」

6. 三目運算符
score<600? "仍需努力":"考上覆旦沒問題"

5. 語句

5.1 if

if(條件) then
    代碼塊
elsif(條件)
    代碼塊
else
    代碼塊
end

if 對應的是 elsif 而不是elseif.
能夠省略then關鍵字

unless與if相反,unless後面的語句結果是true時執行 第二個代碼塊,不然執行第一個代碼塊

unless(條件) then
    代碼塊1
else
    代碼塊2
end

5.2 case語句

case 表達式
    when 常量1,常量2...常量3 then
        代碼塊1
    when 常量n.. then
        代碼塊2
    else 代碼塊3

when 後面能夠是Range對象。
表達式的值常量進行比較須要用=== 而不是==

5.3 循環

while循環:

while (條件) do
代碼塊
end

until循環:

until (條件) do#條件表達式爲false代碼塊被執行
代碼塊
end

for…in語句主要用於 數組Hash對象

for 自定義名稱 in Array|Hash do
    代碼塊1
end

迭代器

Array.each do|定義的變量名|
    代碼塊
end

5.4 跳轉

break next return

6. 數據處理

6.1 字符串

雙引號的字符串,與單引號的字符串

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鍵對應字符
#{} 替換成變量或者表達式所對應的

6.2 字符串操做

合併

+ 符號合併

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 左邊字符串大

6.3 Hash

建立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對

6.4 數組

兩種方式建立數組:
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] #截取第三個到第五個

小明
小強
小剛
小紅
小芳
——
小剛
小紅
小芳

7. 類,對象,方法

7.1 類

注意:
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

7.1.1 追加類

名字相同的類自動合併

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

7.1.2 嵌套類

也叫內部類,使用內部類用::

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

7.1.3 特殊類

專門爲某個對象添加的類

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 我有一隻小毛驢

7.2 方法

7.2.1 默認參數

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!

7.2.2 返回值

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

7.2.3 特殊方法

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

7.2.4 類方法

class Student
    def Student.sayClass
        puts self.class
    end
end
Student.sayClass

Class

7.2.5 構造方法

構造方法名字爲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

7.3 變量與屬性

7.3.1 實例變量

實例變量用於在類內部共享數據。 變量名以@ 開頭。
能夠在如下幾個地方聲明實例變量:

  • 頂層和頂層方法,
  • 類和類方法,
  • 模塊和模塊方法
定義位置 做用域
頂層 頂層表達式和頂層函數
類、模塊 當前類,當前模塊
類方法 當前類下全部方法

7.3.2 類變量

類變量用於在各個類之間共享數據。容許定義位置與實例變量相同
類變量以@@ 開頭

7.3.3 屬性

屬性設置器和讀取器

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 一個或多個可讀寫屬性

7.4 類的繼承

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

7.5 做用域

訪問保護 名稱 說明
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

7.6 代碼塊

{ } 或者 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

此外,代碼塊還能夠有參數、返回值等。

相關文章
相關標籤/搜索