標籤:
運算式和變數:
這兩點和其他主流的程式設計語言基本沒有差別,這裡直接跳過。 需要注意的是 ruby中 x=x+1 可以寫成 x+=1 但是不支援 x++ , x-- 等一元運算子
比較子和運算式:
在ruby中可以直接在運算式中混合使用比較子,來實現如果滿足某個邏輯則進行相應的運算式操作:
1 x = 10 2 puts "x is ten" if x == 10 # x is ten
Expression
除了if關鍵字還可以使用unless,這個表示和if相反的:
1 x = 242 puts "You are not a teenager" unless age > 12 && age < 20 # You are not a teenager
Unless
表示某個數在兩個數之間可以使用between,此時between的兩個邊界都包括:
1 x = 10 2 puts "x is in the area" if x.between?(6, 10) # x is in the area
Between
需要注意的特殊比較符號: x<=>y,該運算式如果 x==y,則返回0;如果 x > y,則返回1; 如果x<y,則返回-1 .
迴圈:
前面看到可以使用數位times塊來實現迴圈,可以有下面兩種形式:
1 # 使用do end來包裹邏輯代碼塊2 5.times do puts "test" end # testtesttesttesttest3 4 # 使用{ }來包裹邏輯代碼快5 5.times {puts "test"} # testtesttesttesttest
Loop
一般來說如果迴圈的邏輯代碼是單行且較短的時候可以使用大括弧的形式,而當多行的時候建議使用do end形式。
另外對於迴圈的時候需要知道當前迴圈數的時候,可以使用下面三種形式的迭代子:
1 1.upto(10) {|number| puts number} 2 # 或者 3 do |number| puts number end 4 5 #下面同樣可以兩種方式6 10.downto(5) {|number| puts number}7 0.step(50, 5) {|number| puts number}
Loop
常量:
在Ruby中一般將常量命名成首字母大寫的形式,一旦變數名首字母大寫之後,雖然可以繼續改變其值,但是ruby會給出相應的警告。其實類名也是首字母大寫,某種程度上,類也可以看做是常量
字串運算式:
1 puts "abc" * 5 # abcabcabcabcabc2 puts ‘x‘ > ‘y‘ # false3 puts ‘x‘ < ‘y‘ # true4 # 如果想得到一個字元ASCII碼的值,使用 ? :5 puts ?A --> 65 # (在ruby2.3.0中好像還是會輸出字元)6 如果想要知道某個ASCII碼對應的字元,可以使用數字 .chr方法來將其轉換為字元:7 puts 65.chr --> A
StringExpression
使用字串插值:
1 puts "This is a #{‘bad ‘ *3} word" # This is a bad bad bad word 2 # 需要注意的是這一句整個必須用雙引號括起來,而裡面的bad則可以用單引號,雙引號都可 3 4 # 另外可以再插值中使用變數: 5 x = 10 6 y = 20 7 # 如果想要輸出 10 + 20 = 30 8 # 直接輸出的話,必須調用數位 .to_s 方法,否則會報錯: 9 puts x.to_s + " + " + y.to_s + " = " + (x + y).to_s10 # 而使用插值的話,輸入為:11 puts "#{x} + #{y} = #{x + y}"
Interpolation
Regex與字串操作:
替換:
最簡單的字串替換為:
1 "foobarbar".sub("bar", "foo") # foofoobar
Sub
該方法只替換第一次遇到的,要替換所有使用 gsub.
當然sub、gsub方法都支援Regex,例如要替換字串中的前兩個字元為 hello,可以使用
1 x = "foobarbar"2 puts x.sub(/^../, "hello") # helloobarbar
regSub
用Regex進行迭代:
在字串中進行迭代處理,scan函數是最好的:
1 x.scan(/./) do |letter| puts letter end
Scan
其中scan的傳入參數也是一個Regex,該函數會遍曆字串,找到匹配的字元並進行相應的處理 。
其中常見的Regex特殊符號有: \w(word) \d(digit) \s(space) ^(表開始) $(表結束) .(任一字元) \A(字元開始的錨) \Z(字元結束的錨) (其中w/d/s的大寫形式表示其小寫形式取反)
1 # 例如找到下面字串中的數字: 2 "the car cost $1000 and that car cost $100".scan(/\d/) do |letter| puts letter end3 # 會發現這時候是一個一個數字輸出,這時就要用到 + 號表示一個或者多個了。4 "the car cost $1000 and that car cost $100".scan(/\d+/) do |letter| puts letter end
Find
匹配查詢:
如果只是想看下字串是否有匹配的模式,可以使用如下面的方式:
1 # the string has no digits2 puts "the string has no digits" unless "hello, this is a test" =~ /[0-9]/
Match
當然可以使用更強大的字串match函數,該函數不需要用 // 指定Regex,會預設的把中間的字串作為Regex,且有一個傳回值,類似於java上的group。可以通過列表似的方式來訪問:
1 puts "the string has no digits" unless "hello, this is a test".match(‘[0-9]‘)2 x = "this is a test".match(/(\w+) (\w+)/)3 x[0] # this is4 x[1] # this5 x[2] # is6 x[3] # nil
Match
數組:
初始化的時候不需要指定長度, 可以直接 a = []. Redis的數組越界訪問元素不會報錯,只是會返回 nil。
往數組加值: a << "word" 或者 a.push(123) --- 這兩種方法都是將元素放到數組末尾
將值彈出來 : a.pop (這時候彈出的是最後的元素)
數組是個先進先出的容器,但是這個pop明顯是後進先出。得到數組長度使用的是 .length屬性。(實際上Redis中數組或者字串的長度擷取length和size方法都可以)
可以使用join方法將數組中的元素組合成一個長的字串,join方法可以不帶參數當做屬性用,也可以帶一個參數表示組合成新的字串之後用什麼字元進行分割。
1 irb(main):013:0> a = [1, 2,3]2 => [1, 2, 3]3 irb(main):014:0> a.join4 => "123"5 irb(main):015:0> a.join(‘|‘)6 => "1|2|3"
join
Ruby(2): 基本文法上