Time of Update: 2017-01-18
在 class 定義裡使用一致的結構。 class Person # extend and include go first extend SomeModule include AnotherModule # constants are next SOME_CONSTANT = 20 # afterwards we have attribute macros attr_reader :name # followed
Time of Update: 2017-01-18
寫出自解釋文檔代碼,然後讓這部分歇息吧。這不是說著玩。 使用英文編寫注釋。 使用一個空格將注釋與符號隔開。 注釋超過一個單詞了,應句首大寫並使用標點符號。句號後使用 一個空格 避免多餘的注釋。 # bad counter += 1 # increments counter by
Time of Update: 2017-01-18
實現 Markdown 文法和代碼文法高亮分別是用的 Redcarpet 和 pygments.rb 兩個 Gem: https://github.com/vmg/redcarpet https://github.com/tmm1/pygments.rb https://github.com/richleland/pygments-css http://
Time of Update: 2017-01-18
一個運行著的程式常會遇到意外的問題.一個要讀取的檔案不存在;當希望存入一些資料時磁碟滿了;使用者可能輸入不恰當的資料. ruby> file = open("some_file") ERR: (eval):1:in `open': No such file or directory - some_file
Time of Update: 2017-01-18
一個實變數由@開頭,它的範圍限制在 self 對象內.兩個不同的對象,即使屬於同一個類,也可以擁有不同值的實變數.從對象外部來看,實變數不能改變甚至觀察(比如, Ruby的實變數從來不是公用的),除非方法由程式員明確聲明.像全域變數一樣,實變數在初始前的值是nil. Ruby的實變數用不著聲明.這暗含著對象的彈性結構.實際上,每個實變數都是在第一次出現時動態加入對象的. ruby> class InstTest
Time of Update: 2017-01-18
全域變數由$開頭.它們可以在程式的任何位置訪問到.在初始化前,全域變數有一個特殊的值 nil. ruby> $foo nil ruby> $foo = 5 5 ruby> $foo 5
Time of Update: 2017-01-18
我們總是希望對未知事件分類.當它發生時,向其它方法傳遞一塊作為參數的代碼是最容易地解決方案,也就是說我們希望像處理資料一樣處理代碼. 一個新的過程對象可以通過proc建立: ruby> quux = proc { | print "QUUXQUUXQUUX!!!\n" | } &
Time of Update: 2017-01-18
物件導向是一個挺讓人迷惑的措辭.叫一切東西都是物件導向會讓別人覺得你很時髦. Ruby 聲稱自己是物件導向的指令碼語言;但究竟什麼才是"物件導向"? 我們已經有了各種各樣的答案,但所有這些恐怕都歸結於同一件事.與其快速地概括它,不如讓我們先花點兒時間考慮一下傳統的編程模式.傳統意義上,一個編程問題從出現的各種資料,以及處理資料的過程(procedures)著手.在這一模式下,資料是呆板,被動和無用的;它完全的求助於那個體積龐大的,主動的,邏輯性的,全能的過程體.這一
Time of Update: 2017-01-18
這章我們將討論更多的Ruby流程式控制制. case 我們用case語句測試有次序的條件.正如我們所見的,這和C,Java的switch相當接近,但更強大. ruby> i=8 ruby> case i | when 1, 2..5 | print "1..5\n"
Time of Update: 2017-01-18
現在我們將前面的一些樣本程式的代碼坼開來分析一下. 下面的例子出現在簡單的例子一節. def fact(n) if n == 0 1
Time of Update: 2017-01-18
讓我們寫一個計算階乘的函數.對於階乘的數學定義如下: n! = 1 (當 n==0 時) = n * (n-1)! (其它情況)
Time of Update: 2017-01-18
Ruby是一種功能強大的物件導向的指令碼語言,她可以使您方便快捷地進行物件導向編程.有時使用像Smalltalk、Eiffel或C++這樣正式的物件導向語言來開發一些小項目顯得有點"小題大作",而Ruby剛好可以滿足這些物件導向編程的需求.當然了,您也可以使用Ruby進行普通的面向過程編程. Ruby的文本處理能力極強,與Perl不分伯仲.同時,Ruby的文法簡單,還有異常處理以及迭代器等構造,使編程變得簡單明了.
Time of Update: 2017-01-18
一、方法Ruby 的方法定義允許為參數設定預設值,不過在帶有預設值的參數後面不能出現不帶有預設值的參數(允許 * 和 &),也就是說下面的方法定義是不被允許的,解釋時會出現 parse error。 還有一點與 C# 不同的是,方法定義不能出現在方法調用的後面。# parse errordef Display(args1="proshea", args2)end# 允許def Display(args1="proshea", *args2)end# 允許def
Time of Update: 2017-01-18
1.導致你的 Rails 應用變慢無非以下兩個原因: 在不應該將 Ruby and Rails 作為首選的地方使用 Ruby and Rails。(用 Ruby and Rails 做了不擅長做的工作) 過度的消耗記憶體導致需要利用大量的時間進行記憶體回收。Rails 是個令人愉快的架構,而且 Ruby 也是一個簡潔而優雅的語言。但是如果它被濫用,那會相當的影響效能。有很多工作並不適合用 Ruby and Rails,你最好使用其它的工具,比如,資料庫在大資料處理上優勢明顯,R
Time of Update: 2017-01-18
用 @wip (工作進行中)標籤標記你未完成的情境。這些情境不納入考慮,且不標記為測試失敗。當完成一個未完成情境且功能測試通過時,為了把此情境加至測試套件裡,應該移除 @wip 標籤。 配置你的預設設定檔,排除掉標記為 @javascript 的情境。它們使用瀏覽器來測試,推薦停用它們來增加一般情境的執行速度。 替標記著 @javascript
Time of Update: 2017-01-18
不要直接從視圖調用模型層。 不要在視圖構造複雜的格式,把它們輸出到視圖 helper 的一個方法或是模型。 使用 partial 模版與布局來減少重複的代碼。 加入 client side validation 至慣用的 validators。 要做的步驟有:
Time of Update: 2017-01-18
避免無限迴圈的元編程。 寫一個函數庫時不要使核心類混亂(不要使用 monkey patch)。 代碼塊形式最好用於字串插值形式。 當你使用字串插值形式,總是提供 __FILE__ 和 __LINE__,使得你的回溯有意義。 class_eval 'def use_relative_model_naming?; true;
Time of Update: 2017-01-18
需要插值與嵌入雙引號的單行字串使用 %() (是 %Q 的簡寫)。多行字串,最好用 heredocs 。 # bad (no interpolation needed) %(<div class="text">Some text</div>) # should be '<div class="text">Some text</div>' # bad (no double-quotes) %(This
Time of Update: 2017-01-18
如果只是需要中尋找字串的 text, 不要使用Regex:string['text'] 針對簡單的結構, 你可以直接使用string[/RE/]的方式來查詢. match = string[/regexp/] # get content of matched regexp first_group = string[/text(grp)/, 1] # get content of captured
Time of Update: 2017-01-18
優先使用 字串插值 來代替 字串串聯。 # bad email_with_name = user.name + ' <' + user.email + '>' # good email_with_name = "#{user.name} <#{user.email}>" # good email_with_name = format('%s <%s>', user.name, user.email)