ruby 基礎知識 二

2022-03-09 14:39:08 字數 2193 閱讀 7712

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 將陣列全部填充為零 ...