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

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

      推薦:關于URL的傳遞字符串問題的研究
      前幾天在調程序的時候遇到了比較郁悶的問題,我用URL從一個頁面傳遞字符串到另一個頁面的時,出現了個奇怪的問題,我要傳遞的字符串是“DK51 700中繼站”;可是另一個頁面接收到

      注意類在一個實例變量@name中存儲的名字,同時注意檢查實例包括所有實例變量的值。

      你自己定義的類可以隨意擴展,而且也可以擴展Ruby內置的類,如:

      irb(main):001:0> class Array
      irb(main):002:1> def print_tr
      irb(main):003:2> puts "<tr>"
      irb(main):004:2> each { |item|
      irb(main):005:3* puts " <td>#{item}</td>"
      irb(main):006:3> }
      irb(main):007:2> puts "</tr>"
      irb(main):008:2> end
      irb(main):009:1> end
      => nil
      Irb(main):010:0> ["hello","world!"].print_tr
      <tr>
      <td>hello</td>
      <td>world!</td>
      </tr>
      => nil

      Rails對內置類型添加了許多擴展屬性,提供了非常豐富的接口,例如:你可以編寫類似5.days.from_now這樣的代碼,返回從現在開始5天后的日期。

      迄今為止,你定義的函數都已經成為實例函數,即它們僅在類的實例中有效。Ruby也有靜態函數,有時也叫做類函數。實際上,你已經調用過一次靜態函數了,那就是new。

      你可以在現有的類上添加任何新的靜態函數,如:

      irb(main):001:0> def String.concat(s1, s2)
      irb(main):002:1> s1 ' ' s2
      irb(main):003:1> end
      => nil
      irb(main):004:0> String.concat 'hi', 'bye'
      => "hi bye"

      你也可以使用self語法在定義或擴展類的上下文中定義它們,如:

      irb(main):001:0> class String
      irb(main):002:1> def self.concat(s1, s2)
      irb(main):003:2> s1 ' ' s2
      irb(main):004:2> end
      irb(main):005:1> end
      => nil
      irb(main):006:0> String.concat 'hi', 'bye'
      => "hi bye"

      反射

      反射是運行時發現關于對象的信息的過程,你可以通過調用methods函數找到某個類可用的函數,Ruby中的基礎類也是對象,下面是查找在Ruby中對每個對象都有效的函數的代碼:

      irb(main):001:0> o = Object.new
      => #<Object:0x3f8feb4>
      irb(main):002:0> o.methods
      => ["inspect", "taguri", "clone", "public_methods"
      , "taguri=", "display", "instance_variable_defined
      ?", "equal?", "freeze", "methods", "respond_to?",
      ...many more methods listed...

      調用methods函數返回的結果是一個字符串數組,包含了那個對象上有效的每個函數的名字,你也可以認為類與散列非常相似,調用methods函數就與獲取散列表的鍵值相似。

      你若不使用函數做點事情,你會覺得它很無趣,為了調用函數,你還可以使用send函數,如下面這兩條語句都是等效的:

      irb(main):003:0> o.inspect
      => "#<Object:0x3f8feb4>"
      irb(main):004:0> o.send "inspect"
      => "#<Object:0x3f8feb4>"

      通過在你的類中定義method_missing函數,Ruby讓你有機會處理未知的函數,如:

      irb(main):139:0> class Object
      irb(main):140:1> def method_missing(*args)
      irb(main):142:2> puts args
      irb(main):143:2> end
      irb(main):144:1> end
      => nil
      irb(main):145:0> o.foobar 1, 2, 3
      foobar
      1
      2
      3
      => nil

      正如你所看到的,傳遞給method_missing函數的參數包括請求的函數和所有傳遞給那個函數的參數,一個更好的定義如下:

      def method_missing(method, *args)

      分享:.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

      來源:模板無憂//所屬分類:.Net教程/更新時間:2009-08-02
      相關.Net教程