Qo_Tn
第一章 學(xué)習(xí)
1.1 Ruby
ruby 特性
弱類型 語(yǔ)言
1.3 下載安裝Ruby 和 Rails
終端 命令 :
安裝 rails
gem install rails
1.4 開發(fā)工具 RubyMine
知了破解版
1.5 手動(dòng)編譯Ruby程序
終端 命令:
編譯:
ruby 路徑+**
檢查代碼:ruby -c 文件名.rb
打開警告:ruby -w 文件名.rb
執(zhí)行字面腳本:ruby -e 文件名.rb
在行模式下運(yùn)行:ruby -l 文件名.rb
ruby -e 'print "Hello";print "Ruby"'
ruby -le 'print "Hello";print "Ruby"'組合命令
-cw-le
1.6 實(shí)現(xiàn)計(jì)算器
puts "Please input Numberl:"
number1=gets
puts "Please input a operator(+,-,*,/):"
op=gets
puts "Please input Number2:"
number2=gets
case op.chomp
when "+"
result=number1.to_i+number2.to_i
when "-"
result=number1.to_i-number2.to_i
when
result=number1.to_i*number2.to_i
when
result=number1.to_i/number2.to_i
end
puts "Result:#{number1.chomp}#{op.chomp}#{number2.chomp}=#{result}"
第二章學(xué)習(xí)
2.1 常量的使用
定義方法(字母大寫)
'常量名(大寫)"='值'相同名 警告錯(cuò)誤,報(bào)錯(cuò)
例子:
PLANT=200
CORPSE=10
puts "僵尸進(jìn)攻一次,植物的生命是:"+(PLANT-CORPSE).to_s
$!
2.2 變量的使用
定義變量
局部變量必須以小寫字母或者下劃線開頭
局部變量 有自己的作用域
例如:
class Test
_info="我是在類中被定義的局部變量"
puts _info
end
module ModelInfo
_info="我是被定義的模塊中的局部變量"
puts _info
end
def info
_info="我是被定義的方法中的局部變量"
puts _tinfo
end
全局變量
- 作用于全局,任何地方都可以定義
- 可以在類中訪問(wèn),也可以在方法中訪問(wèn)
- 全局變量以“$”開頭
例如:
$info="我是被定義的全局變量,是最頂層的變量,我的Fans最多"
def infoQ
tinfo="我是被定義的局部變量"
puts tinfo
puts $info
end
module ModelInfoQ
_info="我是被定義的模塊中的局部變量"
puts _info
puts $info
end
class TestQ
_info="我是在類中被定義的局部變量"
puts _info
puts $info
end
puts $info
| 全局變量 | 說(shuō)明 |
|---|---|
| $! | 最近一次的錯(cuò)誤信息 |
| $@ | 錯(cuò)誤產(chǎn)生的位置 |
| $_ | gets最近讀的字符串 |
| $. | 解釋器最近讀的行數(shù) |
| $& | 最近一次與正則表達(dá)式佩佩的字符串 |
| $~ | 作為字表達(dá)式組的最近一次匹配 |
| $n | 最近匹配的第那個(gè)子表達(dá)式 |
| $= | 是否區(qū)分大小寫的標(biāo)志 |
| $/ | 輸入記錄分隔符 |
| $\ | 輸出記錄分隔符 |
| $0 | Ruby腳本文件名 |
| $* | 命令行參數(shù) |
| $$ | 解釋器進(jìn)程ID |
| $? | 最近一次執(zhí)行的子進(jìn)程退出狀態(tài) |
2.3 數(shù)據(jù)類型的使用
數(shù)據(jù)類型
三大數(shù)據(jù)類型 (數(shù)值型、范圍、符號(hào))
數(shù)值型:整數(shù)、浮點(diǎn)數(shù)
整數(shù):Fixnum、Bignum
新版本 2的30次方不在區(qū)分 .class 統(tǒng)一打印 Integer浮點(diǎn)型
帶有小數(shù)點(diǎn)的字符串,例如:f=3.12c范圍 ('..' 或 '...')
a..b 或 a....b
a..b 定義的是從值a到值b的范圍,包括值a,值b以及值a,值b中間的值
a...b 定義的是從值a到值b的范圍,包括值a,以及值a,值b中間的值,但不包括值b
Ruby 中,范圍是一個(gè)對(duì)象,是Range類的實(shí)例。迭代器
(regect、select、each)regect:
將該范圍轉(zhuǎn)換成一個(gè)數(shù)組,并刪除掉滿足條件的元素。
select:
將該范圍轉(zhuǎn)換成一個(gè)數(shù)組,只選擇滿足條件的元素。
each:
輸出迭代范圍中的每個(gè)元素。符號(hào)
符號(hào)也是一個(gè)對(duì)象.
符號(hào)對(duì)象是一個(gè)字符串,一個(gè)方法,一個(gè)類或者一個(gè)標(biāo)識(shí)符的內(nèi)部表示形式。
創(chuàng)建符號(hào)對(duì)象就在對(duì)象名前面加上一個(gè)冒號(hào)':'就可以了。
只要對(duì)象名相同,則產(chǎn)生的符號(hào)對(duì)象就相同。
字符串和符號(hào)對(duì)象之間是一一對(duì)應(yīng)的。
字符串和符號(hào)對(duì)象就可以通過(guò)to_s和to_sym來(lái)進(jìn)行相互轉(zhuǎn)換。
例如:
dcy="我是你的忠實(shí)粉絲啊"
ly=:"我是你的忠實(shí)粉絲啊"
puts dcy.to_sym==ly
puts ly.to_s==dcy
返回:
true
true
符號(hào)對(duì)象還可以用
%s{表示法}來(lái)創(chuàng)建例如
dcy="我是你的忠實(shí)粉絲啊"
ly=:dcy
dcyandly=%s{dcy}
puts ly==dcyandly
返回 true
2.4 算術(shù)運(yùn)算符和賦值運(yùn)算符
算數(shù)運(yùn)算符
| 全局變量 | 說(shuō)明 | 計(jì)算 | 結(jié)果 |
|---|---|---|---|
| + | 加號(hào) | Z=2+1 | Z的結(jié)果是:3 |
| - | 減號(hào) | Z=2-1 | Z的結(jié)果是:1 |
| * | 乘號(hào) | Z=2*3 | Z的結(jié)果是:6 |
| / | 除號(hào) | Z=6/3 | Z的結(jié)果是:2 |
| % | 求余 | Z=5%2 | Z的結(jié)果是:1 |
| ** | 乘方運(yùn)算 | Z=5**2 | Z的結(jié)果是:25 |
賦值運(yùn)算符
運(yùn)算符 | 說(shuō)明 | 計(jì)算 | 結(jié)果 |
----------|:----------:|----------|----------|
= | 賦值 | Z=1 | Z的結(jié)果是:1 |
+= | 加法賦值 | Z=1, Z+=1 | Z的結(jié)果是:2 |
-= | 減法賦值 | Z=3, Z-=1 | Z的結(jié)果是:2 |
*= | 乘法賦值 | Z=2, Z*=3 | Z的結(jié)果是:6 |
/= | 除法賦值 | Z=7, Z/=3 | Z的結(jié)果是:2 |
%= | 求余賦值 | Z=2, Z%=2 | Z的結(jié)果是:0 |
**= | 乘方賦值 | Z=2, Z**=2 | Z的結(jié)果是:4 |
2.5 位運(yùn)算符的使用
位運(yùn)算符
首先將十進(jìn)制的數(shù)字轉(zhuǎn)換成二進(jìn)制,然后才能進(jìn)行按位運(yùn)算。
位運(yùn)算符是對(duì)整數(shù)數(shù)組的位進(jìn)行邏輯運(yùn)算。
| 位運(yùn)算符 | 說(shuō)明 | 計(jì)算 | 結(jié)果 | |
|---|---|---|---|---|
| & | 按位"與" | Z=10&12 | Z的結(jié)果是:8 | |
| ^ | 按位"異或" | Z=10^12 | Z的結(jié)果是:6 | |
| 按位"或" | Z=10 | 12 | Z的結(jié)果是:14 | |
| ~ | 按位"非" | Z=~10 | Z的結(jié)果是:-11 | |
| << | 按位向左移位 | Z=12<<2 | Z的結(jié)果是:48 | |
| >> | 按位向右移位 | Z=10>>2 | Z的結(jié)果是:2 |
除了“~”是單目運(yùn)算符,即需要一個(gè)操作數(shù),而其他的都是雙運(yùn)算符,即需要兩個(gè)操作數(shù)。
2.6 比較運(yùn)算符和邏輯運(yùn)算符
比較運(yùn)算符
| 比較運(yùn)算符 | 說(shuō)明 |
|---|---|
| > | 大于 |
| < | 小于 |
| <= | 小于或者等于 |
| >= | 大于或者等于 |
| == | 等于 |
| != | 不等于 |
| <=> | 比較兩個(gè)對(duì)象,分別返回1,0和-1 |
| === | 當(dāng)普通對(duì)象處于運(yùn)算符的左邊時(shí),該運(yùn)算符與“==”功能相同; 但左邊的對(duì)象是一個(gè)Range對(duì)象,且右邊對(duì)象包還在該Range內(nèi)時(shí),返回true,否則返回false |
| =~ | 正則表達(dá)式匹配 |
| !~ | 正則表達(dá)式不匹配 |
邏輯運(yùn)算符
| 邏輯運(yùn)算符 | 說(shuō)明 |
|---|---|
| and | 按位"與" |
| or | 按位"異或" |
| not | 按位"或" |
| && | 邏輯"且" |
| | | 邏輯"或" |
| ! | 邏輯"非" |
2.7 三目運(yùn)算符的使用
第一個(gè)操作數(shù)為條件,如果第一個(gè)操作數(shù)成立,則返回一個(gè)值,否則返回另一個(gè)值。
例子:condition?true_value:false_value
2.8 表達(dá)式的返回值
表達(dá)式是由數(shù)字、運(yùn)算符、數(shù)字分組符號(hào)(括號(hào))、自由變量和約束變量等排在一起來(lái)求數(shù)值的組合。
在Ruby語(yǔ)言中,常量、變量、各種字面值、相關(guān)計(jì)算、if或者while等控制語(yǔ)句、類和方法的定義都可以稱為是表達(dá)式。
表達(dá)式的返回值無(wú)非就是有兩種: 一種是有返回值的,另一種是無(wú)返回值的。
例:
score=569
res=if score>600
score.to_s+"考上復(fù)旦沒(méi)問(wèn)題"
else
score.to_s+"分,我很慚愧,我落榜了!"
end
puts res
例2:
score1=596
res=while score1<600
puts "我的分?jǐn)?shù)差"+score.to_s+"不到六百"
score+=1
end
puts res+"的值"
2.9 并行賦值和嵌套賦值
-
并行賦值
交換兩個(gè)變量值,無(wú)需第三個(gè)變量。兩邊變量、值不等同,多余的會(huì)被設(shè)置為nil或忽略左邊以*為前綴, 表示所有對(duì)應(yīng)該變量的值以及后面的值將會(huì)組成一個(gè)數(shù)組,并賦給這個(gè)變量。-
右邊以*為前綴, 則會(huì)將這個(gè)數(shù)組拆開,按元素的相應(yīng)位置進(jìn)行并行賦值。
例如:
c,d="我是變量c","我是變量d" puts "交換前的變量c"+c,"交換后的變量d"+d c,d=d,c puts "交換后的變量c"+c,"交換后的變量d"+dtianqi=["春天","夏天","秋天","冬天"] #(創(chuàng)建的數(shù)組) daibiao=["cyr代表溫暖的春天(77·F)","wdc代表炎熱的夏天(99`F)","wz代表涼爽的秋天(59·F)","yyl代表冷酷冬天(41·F)"] a,b=tianqi puts "a代表的是"+a,"b代表的是"+b a,*b=daibiao puts "a代表的是"+a+"\n數(shù)組b代表的是",b a,b="風(fēng)雨哈佛路",*tianqi puts a,b -
嵌套賦值
把左邊的一些變量用括號(hào)括起來(lái),形成一個(gè)變量列表;與之對(duì)應(yīng)的右邊的值用中括號(hào)括起來(lái)形成一個(gè)子并行賦值的列表。
例如:
tianqi=["春天","夏天","秋天","冬天"] b,(c,d),e=tianqi puts "輸出的b是"+b.to_s,"輸出的c是"+c.to_s,"輸出的d是"+d.to_s,"輸出的e是"+e.to_s b,(c,*d),e="春天",["夏天","不冷不熱天","秋天"],"冬天" puts "b="+b.to_s,"c="+c.to_s,d,"e="+e.to_s
2.10 條件語(yǔ)句
-
條件語(yǔ)句
if (條件) then 代碼塊1 elseif (條件n) 代碼塊n else 代碼塊n+1 end- if 修飾語(yǔ)句
例如:
str=1 if (str==1) puts "1月代表的是春天: 花香鳥語(yǔ)飄滿村。細(xì)聽(tīng)來(lái),句句是鄉(xiāng)音。" end month=2 mothinfo="春天" if (month<3) puts "2月份是:"+mothInfo- unless
如果...不,除非,除...之外 的意思。 unless (條件) then 代碼塊1 else 代碼塊2 end
a=2 unless a**5==32 then puts "a的5次方不是32" else puts "a的5次方是32" end- case語(yǔ)句
case 表達(dá)式 when 常量1,常量2...常量3 then 代碼塊1 when 常量4,常量5...常量n then 代碼塊2 else 代碼塊3 endnum=6 case num when 6 puts "今天是周末" else puts "今天不是周末" end month=6 case month when 1,2,3 puts "春意盎然" when 4,5,6 puts "烈日驕陽(yáng)" when 7,8,9 puts "秋高氣爽" when 10,11,12 puts "冬雪棉被" else puts "該月份已超出程序可以計(jì)算的范圍" end
2.11 循環(huán)語(yǔ)句
-
while 循環(huán)語(yǔ)句
while (條件) do 代碼塊 end
row=1 while (row<=9) do row=row+1 puts "第"+(row-1).to_s+"次被打印的是:"+row.to_s end -
until 循環(huán)語(yǔ)句
與while 語(yǔ)句作用相反
row=0 flh=["紅兒","橙兒","黃兒","綠兒","青兒","藍(lán)兒","紫兒"] until (row>=7) do flh.each do |h| row=row+1 puts "王母娘娘的第"+row.to_s+"個(gè)女兒的名字是:"+h.to_s end end -
for...in 循環(huán)語(yǔ)句
for 自定義名稱 in Array|Hash do 代碼塊1 endfor...in 語(yǔ)句主要是遍歷數(shù)組和Hash對(duì)象的元素
shiren=["蒹葭蒼蒼","白露為霜","所謂伊人","在水一方","乘興見(jiàn)之","臉胖且長(zhǎng)","乘興會(huì)之","腰如水缸"]#創(chuàng)建數(shù)組 for shiju in shiren do puts shiju end -
迭代器
主要用于將數(shù)組、Hash對(duì)象和普通對(duì)象的變量進(jìn)行迭代輸出。-
array.each do |定義的變量名| 代碼塊 end
例如:
names=["琵琶語(yǔ)","東風(fēng)破","小酒窩","擦身而過(guò)"] names.each do |name| puts name end -
loop
- loop 是一個(gè)最基本的迭代器,使用loop語(yǔ)句可以執(zhí)行循環(huán)功能,但是必須注意的是: 使用loop語(yǔ)句進(jìn)行循環(huán)時(shí),程序會(huì)無(wú)限次的循環(huán)指定的代碼,因此必須使用break語(yǔ)句來(lái)結(jié)束這個(gè)循環(huán)。
2.12 跳轉(zhuǎn)語(yǔ)句
- break、next、redo、return
- break
跳出整個(gè)循環(huán),嵌套中跳出嵌套(一層) - next
結(jié)束循環(huán)語(yǔ)句,next只終止當(dāng)前的循環(huán),進(jìn)行下一個(gè)循環(huán) - redo
類似于next,不同的是,使用redo 語(yǔ)句,不用檢查循環(huán)條件是否成立,就執(zhí)行下一次循環(huán)。 - return
用來(lái)結(jié)束循環(huán)語(yǔ)句,但是return 主要用來(lái)結(jié)束一個(gè)方法,并且針對(duì)這個(gè)方法有返回值。
- break
例如:
```
i=0
loop{
puts "i的值是"+i.to_s
i+=1
if (i>=3)
break
end
}
puts "--------------------------------------------------------------"
music=1
while (music<=5) do
if (music==5)
music+=1
next
end
puts "《簡(jiǎn)愛(ài)》這首歌曲已循環(huán)播放了"+music.to_s+"次"
music+=1
yinyue=1
while (yinyue<=3) do
if (yinyue==2)
yinyue+=1
next
end
puts "《曲終人散》這首音樂(lè)已經(jīng)循環(huán)播放了"+yinyue.to_s+"次"
yinyue+=1
end
end
puts "--------------------------------------------------------------"
i=1
while (i<=5) do
if (i==5)
i+=1
redo
end
puts "這是第"+i.to_s+"次循環(huán)"
i+=1
end
puts "--------------------------------------------------------------"
def search(weatherName)
weathers=["春天","夏天","秋天","冬天"]
for weather in weathers do
puts weather
if (weather==weatherName) then
return true
else
return false
end
end
end
if search("春天") then
puts "這個(gè)月的天氣是春天"
else
puts "這個(gè)月的天氣不是春天"
end
```