ruby最近是乙個比較熱門的詞彙,許多程式設計師都開始將目光轉向這項語言。它存在著許多慣用法,下面就向大家總結了一些ruby慣用法,作為參考物件。
迭代一般寫法:
for i in (1..10) puts i end
習慣寫法:
(1..10).each
或1.upto(10) # from njmzhang
||=賦值
一般寫法:
number = 1 if number.nil? number = 1 unless number
習慣寫法:
number ||= 1
程式入口
if __file__ == $0
或if $program_name == __file__
這個相當於main(), 邏輯判斷的意思當程式名($0或另乙個)和當前檔名(__file__)一致時,也就是當前檔案是被單獨執行的而不是被別的檔案呼叫。這個方法還有個用法是作為unit test使用。
預設變數和特殊記號
類似$0的perl風格預設常量還有很多,參見programming ruby p319
其中比較常用的如$:代表庫搜尋路徑,修改方法常見有: **$:.unshift('buildscript') # from gigix 或 $: << file.join(file.dirname(__file__), 'currentclass')
後一種方法使用了相對路徑,因為ruby的module不要求namespace和檔案目錄結構要對應一致,很多時候統統放乙個目錄裡
%w格式化命令(from qiezi) 可以少打幾個引號
%w #
等價['a', 'b', 'c', 'd']
``(~鍵下的撇號)用來執行shell外部命令,如:
`help`
inject
一般寫法:
result = (1..10).each
習慣寫法:
(1..10).inject()
inject有點難理解,相當於python的reduce和一些fp裡的fold。inject的塊變數有兩個(這裡是array和 item),第二個變數(item)用來列舉被inject的集合(這裡是(1..10)這個range), 而第乙個變數(array)由inject的引數初始化(這裡是,可選),並在block被反覆執行時保持持久(相當於靜態變數),而item則在每次列舉時被更新為下乙個值。
我們再看一下inject的另一種通常用法就會更明白了:
求和(1..10).inject
這個等於
(1..10).inject(0)
也就是塊變數sum被初始化成0然後反覆迭代執行塊的內容,最後返回sum,並行賦值 這個很多人都知道了,比如:
a,b = 0, 1 a,b = b, a #
交換a,b
當然可以延伸出一些很詭異的變化,不提倡使用阿。
還有乙個用法是讓函式返回「多個結果」(不是多個物件),如:
def test 1,2 end x, y = test #x = 1, y = 2
這個njmzhang說的很對,其實函式返回的是乙個array,然後再並行匹配到變數上去。(所以我對多個結果特別加了引號) 這顯然是個syntax sugar,你隨便用逗號分割幾個變數是不會自動組成array的。
注意這種並行匹配當兩遍不平衡時會造成的問題:
a,b = [1,2,3] # a = 1, b = 2, 3
被丟棄a,b,c = [1,2] # a = 1, b = 2, c = nil
被初始化成nil
*的匹配 一般來說*用於把乙個array展開:
a, *b = [1,2,3] #a = 1, b = [2,3]
類似fp裡的x:xs(haskell), x::xs(ocaml), [a | b] (erlang from 布娃娃)
rescue簡單用法
begin 1/0 rescue puts 'wrong' end
可以簡化為
1/0 rescue puts 'wrong'
原文:[url]
Python程式設計慣用法
一般交換兩個值是借助中間變數來實現,不過python有更簡單的實現方式 x,y y,x 這種方式耗時少,也更加簡潔。之所以能這樣,因為一般情況下python的表示式的計算順序是從左到右,但是遇到表示式賦值的時候,表示式右邊的操作會先於左邊的運算元計算,因此表示式 exp3,exp4 exp1,exp...
Ruby和物件導向概覽
摘要 irb 互動式ruby 在irb中輸入源 並按回車鍵,會立即看到結果。有時這種環境被稱為即時或互動式環境 irb 互動式ruby。在irb中輸入源 並按回車鍵,會立即看到結果。有時這種環境被稱為即時或互動式環境。ruby中一切都是物件。puts 1 10。1是物件,10也是物件。它們都是fix...
C 之RAII慣用法
c 中的raii全稱是 resource acquisition is initialization 直譯為 資源獲取就是初始化 但是這翻譯並沒有顯示出這個慣用法的真正內涵。raii的好處在於它提供了一種資源自動管理的方式,當產生異常 回滾等現象時,raii可以正確地釋放掉資源。舉個常見的例子 在資...