下面,我要開始學(xué)習(xí)Ruby基本語法了证芭,最近忙的只有晚上能學(xué)一會(huì)了瞳浦。
變量
- 局部變量:英文字母或
_
開頭(注意關(guān)鍵字) - 全局變量:
$
開頭(不推薦) - 實(shí)例變量:
@
開頭 - 類變量:
@@
開頭 - 偽變量:
nil
,true
,false
,self
等 - 預(yù)定義變量
常量
以大寫字母開頭(可以修改,但有警告)
多重賦值
- 合并賦值
>> a,b,c=1,2,3
>> p [a,b,c]
[1, 2, 3] # 挨個(gè)賦值
>> a,b,c=1,2
>> p [a,b,c]
[1, 2, nil] # 缺少的用nil
>> a,b,c=1,2,3,4
>> p [a,b,c]
[1, 2, 3] # 多余的丟棄
>> a,b,*c=1,2,3,4
>> p [a,b,c]
[1, 2, [3, 4]] # 未分配的值封裝為數(shù)組賦給*變量
>> a,*b,c=1,2,3,4
>> p [a,b,c]
[1, [2, 3], 4] # 同上
>>
置換變量:a,b = b,a(厲害了废士,word哥=辛省)這個(gè)666,我之前都沒見過這種用法啊
- 多重賦值還有更多的用法(提取數(shù)組中的數(shù)據(jù))官硝,這里就不贅述了
輸出語句
- puts:自動(dòng)在每個(gè)字符串末尾加換行符
- p:原樣輸出不進(jìn)行轉(zhuǎn)義
- pp:以換行調(diào)整輸出結(jié)果
通過程序來看一下:
? ~ irb --simple-prompt
>> print "123\n","123"
123
123
=> nil
>> puts "123","123"
123
123
=> nil
>> p "123\n","123"
"123\n"
"123"
=> ["123\n", "123"]
>>
可以看出上面的結(jié)論矗蕊,同時(shí)也可以看出p
方法與另外兩個(gè)方法不同(注意返回值)
# 我為什么要加橫線呢,因?yàn)樯线吺俏易蛲砩蠈懙?/p>
控制語句
- 順序控制
- 條件控制
if -
then- (elseif-then/else) - end(條件為真執(zhí)行)
unless -then- (else) - end(條件為假執(zhí)行)
case - (when -then)* - else - end(when可指定多個(gè)值氢架,廣義相等)
- 循環(huán)控制
for [var] in [start]..[end]
do- end(for [var] in [object]do- end)
while -do- end
until -do- end(條件為假時(shí)執(zhí)行)
[number].times do|[var]|- end
[object].each do |[var]*| - end(([start]..[end]).each do|[var]|- end)
loop do - (break) - end
- 異成悼В控制
begin - rescue
[Exception] => [ex var]-ensure- end(類比try-catch-finally)
使用raise
拋出異常
可以使用retry
指定重新回到begin
處重新執(zhí)行(適當(dāng)?shù)?code>sleep)
若不定義[ex var],則:
$!
表示最后發(fā)生的異常對(duì)象
$@
表示最后發(fā)生異常的位置信息(=$!.backtrace
)
說明
- 廣義相等
===
是指:相等岖研、同=~
匹配卿操、右邊對(duì)象屬于左邊類 .etc.
when即是使用===
判斷,但when可以指定多個(gè)值 - if/unless可以作為修飾:
puts "a>b" if a>b
- 循環(huán)控制:
break
/next
/redo
-
do - end
等同于{ - }
:約定多行用前者孙援,寫于一行用后者
10.times {|i| puts i}
- 若整個(gè)方法體都被
begin-end
包括害淤,可以省略(只寫rescue
和ensure
)
正則表達(dá)式
/pattern/ =~ "String"
返回匹配索引位置或nil
/pattern/i
表示不區(qū)分大小寫
=> ["joshua", "lbq", "ben"]
>> names.each do |name|
?> if /b/ =~ name # nil與false表示假,其余均為真
>> puts name
>> end
>> end
lbq
ben
=> ["joshua", "lbq", "ben"]
>>
方法
- 實(shí)例方法(最常用)拓售,例如
to_s
對(duì)象能夠使用的實(shí)例方法是由所屬的類決定的 - 類方法窥摄,例如
Array.new
調(diào)用類方法,可以使用::
替代.
- 函數(shù)式方法:沒有接受者础淤,例如
print
方法定義
def [function] (args=default...) - return - end
def [function] (arg 1: default 1, arg 2: default 2, ..., **undefined) - end(推薦)
返回真假值的方法以?結(jié)尾
參數(shù)個(gè)數(shù)不確定崭放,參數(shù)前加*
省略return則將最后一個(gè)表達(dá)式作為返回值(return表示返回nil)
帶塊方法:yield
補(bǔ)充:對(duì)于多個(gè)單詞組合的變量名
使用 _ 隔開各個(gè)單詞(變量名/方法名)
單詞以大寫字母開頭(類名/模塊名)
我看到的晚了,作業(yè)已經(jīng)寫完了[:cry]
庫與引用庫
require "lib"
# init ...
# call
先到這里值骇,我去寫個(gè)作業(yè)去(感覺已經(jīng)可以做了莹菱,let me see 一 see)
類
類的創(chuàng)建(類名首字母大寫)
class - def initialize(args) - end(new方法調(diào)用) - (def [function])* - end
@[var]:實(shí)例變量
self變量
存取器
attr_reader
attr_writer
attr_accessor
attr_accessor: name
等同于:
def name
@name
end
def name=(value)
@name = value
end
權(quán)限
public(函數(shù)默認(rèn)為public,initialize除外)
private(initialize默認(rèn))
protected
模塊
模塊創(chuàng)建(首字母大寫)
module - module_function: [function]* - end
語法太多吱瘩,請(qǐng)自行查看
推薦使用《Ruby基礎(chǔ)教程(中文第四版)》