Time of Update: 2017-01-18
rack是ruby伺服器和rack應用程式之間的一個架構,rails,sinatra都是基於rack構建的,都屬於rack應用程式。rack提供了一個標準的介面,用於與伺服器進行互動。標準的rack程式是一個可以響應call的對象,可以是對象、Proc、lambda甚至是method,它接收env參數(環境對象),返回一個數組,數組包括: 狀態(status),http響應狀態代碼 可以是hash,為http的header資訊
Time of Update: 2017-01-18
鉤子方法有些類似事件驅動裝置,可以在特定的事件發生後執行特定的回呼函數,這個回呼函數就是鉤子方法(更形象的描述: 鉤子方法可以像鉤子一樣,勾住一個特定的事件。),在Rails中before\after函數就是最常見的鉤子方法。Class#inherited方法也是這樣一個鉤子方法,當一個類被繼承時,Ruby會調用該方法。預設情況下,Class#inherited什麼都不做,但是通過繼承,我們可以攔截該事件,對感興趣的繼承事件作出回應。class String def
Time of Update: 2017-01-18
類方法類方法其實質是生活在該類的單件類中的單件方法。其定義方法有三種,分別是:# 法一def MyClass.a_class_method; end# 法二class MyClass def self.anther_class_method; endend# 法三*class MyClass class << self def yet_another_class_method; end
Time of Update: 2017-01-18
演算法原理:比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後一個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。實現假設有這樣一個數組: [4, 1, 3, 2]冒泡排序為從第一個數開始,吧這個數與後面的數比較,如果這個數比後面的大,就交換他們的位置。比如,第一次比較4和1,發現4比1大,交換 -> [1, 4, 3,
Time of Update: 2017-01-18
何謂猴子補丁(Monkey Patch)?在動態語言中,不修改原始碼而對功能進行追加和變更。使用猴子補丁的目的: 1、追加功能 2、功能變更 3、修正程式錯誤 4、增加鉤子,在執行某個方法的同時執行一些其他的處理,如列印日誌,實現AOP等, 5、緩衝,在計算量很大,結算之後的結果可以反覆使用的情況下,在一次計算完成之後,對方法進行替換可以提高處理速度。Ruby的類都是開放類,即在類定義之後還可以任意新增內容,
Time of Update: 2017-01-18
安裝Ruby與升級RubyGems提示:在Ubuntu環境下安裝過程中,如果提示許可權問題,可以使用sudo make和sudo make install。1.Ruby安裝wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.gz \&& tar -xzvf ruby-1.9.3-p125.tar.gz \&& cd ruby-1.9.3-p125 \&& ./configure
Time of Update: 2017-01-18
範圍Ruby中不具備嵌套範圍(即在內部範圍,可以看到外部範圍的)的特點,它的範圍是截然分開的,一旦進入一個新的範圍,原先的綁定會被替換為一組新的綁定。程式會在三個地方關閉前一個範圍,同時開啟一個新的範圍,它們是: 類定義class 模組定義 module 方法定義
Time of Update: 2017-01-18
Ruby解析JSONRuby解析Json例子:json = '["a", "B", "C"]'puts "Unsafe #{unsafe_json(json).inspect}" #輸出Unsafe ["a", "B", "C"] Ruby解析Json把上面的json字串解析成Array。這樣的方法並不安全,比如:json = 'puts "Danger Will Robinson"' puts "Unsafe #{unsafe_json(json).inspect}" 又該輸出什麼呢?很遺憾,
Time of Update: 2017-01-18
一、基礎文法1.直接以字串形式擷取nokogiri對象:html_doc = Nokogiri::HTML("<html><body><h1>Mr. Belvedere Fan Club</h1></body></html>")xml_doc =
Time of Update: 2017-01-18
安裝對於Ubuntu,需要安裝好 libxml2, libxslt 這兩個組件:$ apt-get install libxml2 libxslt然後就可以:$ gem install nokogiri可選項nokogiri提供了一些解析檔案時的可選項,常用的有: NOBLANKS : 刪除空節點 NOENT : 替代實體 NOERROR : 隱藏錯誤報表 STRICT : 精確解析,當解析到檔案異常時拋出錯誤 NONET :
Time of Update: 2017-01-18
REXML 是一個完全用ruby寫的processor ,他有多種api,其中兩個經典的api是通過DOM-like 和SAX-like 來進行區分的。第一種是將整個檔案讀進記憶體,然後儲存為一個分層的形式(也就是一棵樹了).而第二種是"parse as you go",當你的檔案很大,並且記憶體受到限制的時候,比較適合用這種。 rexml具有如下特點: 100%用ruby編寫 可以用來解析SAX和DOM 輕量,不足2000行代碼 提供完整的API支援
Time of Update: 2017-01-18
前段時間看到很多人寫的下妹子指令碼,自己也寫一個module CommonHelper require 'nokogiri' require 'open-uri' def down_load_xmz site_url = "http://www.xxx.com" for index_page in 1..141 doc_html = Nokogiri::HTML(open(site_url+'/share/comment-page-'+index_page.to_s))
Time of Update: 2017-01-18
時間對象. Time.now返回目前時間.1、Time.atTime.at(time[, usec])返回time所指時間的Time對象. time可以是Time對象,也可以是表示自起算時間以來的秒數的整數或浮點數.若浮點精度不夠時,可以使用usec. 它將返回time +(usec/1000000)所表示的時間. 此時,time和usec都必需是整數.產生的Time對象將使用地方時的時區.2、Time.gm、Time.utcTime.gm(year[, mon[, day[, hour[,
Time of Update: 2017-01-18
1. 建立HTTP串連(通過GET方式發送請求參數)require "open-uri" #如果有GET請求參數直接寫在URI地址中 uri = 'http://uri' html_response = nil open(uri) do |http| html_response = http.read end puts html_response require "open-uri" #如果有GET請求參數直接寫在URI地址中 uri = 'http://uri'
Time of Update: 2017-01-18
執行個體一今天你還是像往常一樣來上班,一如既往地開始了你的編程工作。專案經理告訴你,今天想在伺服器端增加一個新功能,希望寫一個方法,能對Book對象進行處理,將Book對象的所有欄位以XML格式進行封裝,這樣以後可以方便與用戶端進行互動。並且在封裝開始前和結束後要列印日誌,這樣方便調試和問題定位。沒問題!你覺得這個功能簡直是小菜一碟,非常自信地開始寫起代碼。Book對象代碼如下:class Book attr_accessor :book_name, :pages, :price,
Time of Update: 2017-01-18
概述 若你從事過物件導向開發,實現給一個類或對象增加行為,使用繼承機制,這是所有物件導向語言的一 個基本特性。如果已經存在的一個類缺少某些方法,或者須要給方法添加更多的功能(魅力),你也許會僅僅繼承這個類來產生一個新類—這建立在額外的代碼上。
Time of Update: 2017-01-18
之前有看過《ruby設計模式》,不過漸漸的都忘記了。現在買了一個大話設計模式,看起來不是那麼枯燥,順便將代碼用ruby實現了一下。簡單原廠模式:# -*- encoding: utf-8 -*-#運算類class Operation attr_accessor :number_a,:number_b def initialize(number_a = nil, number_b = nil) @number_a = number_a @number_b = number_b end
Time of Update: 2017-01-18
Ruby的安裝注意點 OSX或linux較好 不同版本的實現:c++、C、java 本次C Ruby 安裝方法 linux或OSX都有預裝 包管理器(apt、yum、brew),並非最新 版本控制系統:rvm(rvm.io)、rbenv rvm 查看ruby版本 rvm list known安裝rvm install 2.2.1協助rvm --help使用者手冊 : man rvmrbenv OSX下用brew安裝
Time of Update: 2017-01-18
下面這段程式讓我糾結了很久,Ruby中private的概念真的很奇怪。。。class Test private def test_print puts 'test' endendclass Test2 < Test def test_print2 # self.test_print #=> 這裡加上self就不能調用,private method `test_print' called for # (NoMethodError) test_print #=>
Time of Update: 2017-01-18
使用builder建立XMLbuilder安裝方法:gem install builderrequire 'builder' x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1) #":target =>$stdout"參數:指示輸出內容將被寫向標準輸出控制台 #":indent =>1"參數:XML輸出形式將被縮排一個空白字元x.instruct! :xml,:version