解析.NET程序員 Ruby核心語法入門(7)_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:關于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

      共7頁上一頁1234567下一頁
      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-08-02
      相關.Net教程