ruby 中的動態方法
rails 大量使用了符號(symbol)。符號看上去很像變數名,不過以冒號作為字首。符號的例子包
括:action、:line_items、:id 等。可以把符號看作字串文字,不過——如同魔法般地——被變成
了常量。
可以把冒號看作「名字叫做……的東西」,因此:id 的意思就是「名字叫做id 的東西」。
rails 用符號來給別的東西打上標記。尤其是,rails 常常用符號來給方法引數命名,以及用作
hash 的鍵。譬如說:
redirect_to :action => "edit" , :id => params[:id]
===在類定義的主體部分,可以定義類方法和例項方法。只要在方法名的前面加上"self.」字首(請看
上述**的第5 行),就可以讓它成為類方法:可以在類層面上呼叫它。以上述**為例,我們可以在應
用程式的任何地方進行下列呼叫:
to_collect = order.find_all_unpaid
通常的方法定義(請看第9 行對total 方法的定義)則會建立出例項方法(instance method)。
例項方法必須在物件層面上呼叫。在下面的例子中,order 變數引用乙個order 物件,total()方法的
定義如前所述。
puts "the total is #"
可以看到find_all_unpaid()和total()方法之間的差異。前者並不特定針對某乙份訂單,因
此我們在類層面上定義它,並通過order 類來呼叫它;後者只對乙份訂單生效,因此我們將其定義為實
例方法,並針對乙個特定的order 物件來呼叫它。
==物件將內部狀態儲存在例項變數(instance variable)中,例項變數的名字必須以「@」開頭,
所有例項方法都可以訪問它們。每個物件擁有各自獨立的一組例項變數
==模組和類有相似之處:它們都包含一組方法、常量,以及其他類和模組的定義。但和類不同的是,
你無法建立模組的例項。
==陣列的乙個常用方法是<<,該方法會把乙個值附加到陣列的尾端。
ages =
for person in @people
ages << person.age
end==
ruby 的hash 與陣列非常相似。hash 字面量使用大括號,而不是方括號,並且其中的每個條目必
須由兩個物件組成:前者是索引鍵,後者是值。譬如說,可以這樣建立「樂器」與「樂器種類」之間的對
應關係。
inst_section =
=>左邊的東西是索引鍵,右邊的是與之對應的值。在同乙個hash 中,索引鍵必須唯一,也就是說
你不能為:drum 建立兩個條目。hash 中的鍵和值可以是任意物件——你甚至可以在hash 中儲存陣列或
者別的hash.在rails 中,通常使用符號來作為hash 的索引鍵。
正規表示式可以用於指定字元的組合模式(pattern),並將其與字串相匹配。在ruby 中,建立
正規表示式的方式通常是/pattern/或者%r。
譬如說,你可以編寫乙個模式,使之匹配包含「perl」或者「python」的字串。這個正則表達
式的寫法是/perl|python/。
if line =~ /p(erl|ython)/
puts "there seems to be another scripting language here"
end還可以在模式中指定重複字元(repetition)。例如/ab+c/可以匹配到這樣的字串:其中包含
乙個「a」,其後是乙個或多個「b」,再然後是乙個「c」。如果把模式中的加號變成星號,/ab*c/匹配到
的則是這樣的字串:乙個「a」,然後是0 個或多個「b」,再然後是乙個"c」。
==簡單地說,**塊(block)就是大括號或者do...end 之間的**。按照慣例,單行的**塊使用
大括號,多行的**塊使用do/end。
# this is a block
do ###
club.enroll(person) # and so is this
person.socialize #
end ###
**塊只能出現在方法呼叫的後面:**塊的開始標記必須緊跟在方法呼叫的同一行。譬如說,在
下列**中,包含了「puts "hi"」的**塊緊跟著對greet()方法的呼叫。
greet
Ruby 基礎知識(一)
聽說ruby的語法非常簡單,於是這幾天就在見識了 看的書是 ruby programing 向ruby之父學程式設計 據稱,ruby也是一種完全物件導向的語言。一些簡單的語法如下 1顯示字串 print hello,ruby n 由於 表示字串的開始與結束,所以如果要顯示 的話,應該在 前加上 如 ...
Ruby基礎知識 常用物件
不同於c 中的datetime,在ruby中日期和時間分別對應了date和time兩個類。1.1 日期 require date date date.new 2013,5,28 date date 1 昨天 date date 1 下月 puts date.leap?閏年判斷 puts date.t...
基礎知識 二
1,較大陣列應該在main函式外宣告,否則可能因為 他作為臨時變數在堆疊段中佔據的空間過大,棧溢位 2,string.h memcpy b,a,sizeof int k a b 複製k個元素 memcpy b,a,sizeof a a b memset a,0,sizeof a 將陣列全部填充為零 ...