解析.NET程序員 Ruby核心語(yǔ)法入門(7)_.Net教程
推薦:關(guān)于URL的傳遞字符串問(wèn)題的研究前幾天在調(diào)程序的時(shí)候遇到了比較郁悶的問(wèn)題,我用URL從一個(gè)頁(yè)面?zhèn)鬟f字符串到另一個(gè)頁(yè)面的時(shí),出現(xiàn)了個(gè)奇怪的問(wèn)題,我要傳遞的字符串是“DK51 700中繼站”;可是另一個(gè)頁(yè)面接收到
元編程
即使Ruby沒(méi)有屬性,你也可以使用函數(shù)調(diào)用,通常不需要括弧來(lái)模擬屬性,你也需要影響Ruby以“=”結(jié)束函數(shù)的特殊處理方式,讓它們擔(dān)當(dāng)調(diào)節(jié)器的作用。
你可以象下面這樣定義一個(gè)person類:
irb(main):001:0> class Person
irb(main):002:1> def age
irb(main):003:2> @age
irb(main):004:2> end
irb(main):005:1> def age=(value)
irb(main):006:2> @age = value
irb(main):007:2> end
irb(main):008:1> end
=> nil
接下來(lái)就可以使用person類的實(shí)例,將age當(dāng)作person類的一個(gè)屬性來(lái)處理,如:
irb(main):009:0>p = Person.new
=># 如果你想將age的默認(rèn)值設(shè)為一個(gè)非零的值,那么你可以使用initialize函數(shù)來(lái)設(shè)置。
這個(gè)代碼顯得非常標(biāo)準(zhǔn),如果這是一個(gè)類似c#的語(yǔ)言,你可能會(huì)使用類似Visual Studio中片段,甚至靜態(tài)代碼的產(chǎn)生會(huì)自動(dòng)生成reader和writer的屬性。
在Ruby中,你可以使用元編程做一點(diǎn)努力就可以創(chuàng)建這些事物,理想情況下,你可以編寫(xiě)類似下面這樣的代碼:
class Person
prop :age
end
你應(yīng)該在對(duì)象上定義個(gè)類(靜態(tài))函數(shù)以便你在定義自己的類時(shí)可以使用它,你也可以使用一個(gè)你還沒(méi)有看到過(guò)的函數(shù),class_eval函數(shù),如:
irb(main):001:0> class Object
irb(main):002:1> def self.prop *names
irb(main):003:2> names.each { |name|
irb(main):004:3* self.class_eval "
irb(main):005:3" def #{name}
irb(main):006:3" @#{name}
irb(main):007:3" end"
irb(main):008:3> self.class_eval "
irb(main):009:3" def #{name}=(value)
irb(main):010:3" @#{name} = value
irb(main):011:3" end"
irb(main):012:3> }
irb(main):013:2> nil
irb(main):014:2> end
irb(main):015:1> end
=> nil
上面使用的class_eval函數(shù)是創(chuàng)建了另外一個(gè)函數(shù)結(jié)束的,它給字符串賦值,因此你可以在你的類中編寫(xiě)自己的函數(shù)。
每個(gè)傳遞給prop函數(shù)的名字向新類添加了兩個(gè)函數(shù):getter和setter。最終使用你傳遞給prop的名字替換掉#{name}。
接下來(lái),你可以在你的類定義中使用prop了,如:
irb(main):016:0> class Person
irb(main):017:1> prop :age, :name
irb(main):018:1>
irb(main):019:1* def initialize(age, name)
irb(main):020:2> @age = age
irb(main):021:2> @name = name
irb(main):022:2> end
irb(main):023:1> end
=> nil
irb(main):024:0> p = Person.new(36, "Brad")
=> # 在你的環(huán)境中有了這些便利的工具后,你可以更快速地創(chuàng)建更高層次的類,使用這些元編程技巧可以幫助你工作得更好,不需要依賴于編輯片段或編譯時(shí)代碼生成。
小結(jié)
本文只是對(duì)Ruby中便利工具做了一個(gè)皮毛介紹,今天學(xué)習(xí)好Ruby可以在當(dāng)Ruby.在.NET和Silverlight中可用時(shí)幫助你,有這么強(qiáng)大的一個(gè)動(dòng)態(tài)編程語(yǔ)言,你的編程工具箱也會(huì)擴(kuò)寬許多,但更重要的是,它可以幫助你開(kāi)始以一種新的方式思考問(wèn)題和解決方案。
分享:.NET Framework 3.5 SP1正式版微軟今天發(fā)布了.NET Framework 3.5第一個(gè)SP服務(wù)包的最終版.這是一個(gè)累積更新,包含很多基于.NET Framework 2.0、3.0和3.5不斷生成的新功能,此外還包括.NET Framework 2.0 SP2和.NET Framewo
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-解析.NET程序員 Ruby核心語(yǔ)法入門(7)
。