Ruby慣用法總結概覽

2021-08-30 09:27:54 字數 2020 閱讀 7855

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可以正確地釋放掉資源。舉個常見的例子 在資...