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