解析.NET程序員 Ruby核心語法入門(6)_.Net教程
推薦:關于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
- 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核心語法入門(6)。