解析.NET程序員 Ruby核心語法入門(6)_.Net教程
推薦:關(guān)于URL的傳遞字符串問題的研究前幾天在調(diào)程序的時(shí)候遇到了比較郁悶的問題,我用URL從一個(gè)頁面?zhèn)鬟f字符串到另一個(gè)頁面的時(shí),出現(xiàn)了個(gè)奇怪的問題,我要傳遞的字符串是“DK51 700中繼站”;可是另一個(gè)頁面接收到
注意類在一個(gè)實(shí)例變量@name中存儲(chǔ)的名字,同時(shí)注意檢查實(shí)例包括所有實(shí)例變量的值。
你自己定義的類可以隨意擴(kuò)展,而且也可以擴(kuò)展Ruby內(nèi)置的類,如:
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對(duì)內(nèi)置類型添加了許多擴(kuò)展屬性,提供了非常豐富的接口,例如:你可以編寫類似5.days.from_now這樣的代碼,返回從現(xiàn)在開始5天后的日期。
迄今為止,你定義的函數(shù)都已經(jīng)成為實(shí)例函數(shù),即它們僅在類的實(shí)例中有效。Ruby也有靜態(tài)函數(shù),有時(shí)也叫做類函數(shù)。實(shí)際上,你已經(jīng)調(diào)用過一次靜態(tài)函數(shù)了,那就是new。
你可以在現(xiàn)有的類上添加任何新的靜態(tài)函數(shù),如:
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語法在定義或擴(kuò)展類的上下文中定義它們,如:
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"
反射
反射是運(yùn)行時(shí)發(fā)現(xiàn)關(guān)于對(duì)象的信息的過程,你可以通過調(diào)用methods函數(shù)找到某個(gè)類可用的函數(shù),Ruby中的基礎(chǔ)類也是對(duì)象,下面是查找在Ruby中對(duì)每個(gè)對(duì)象都有效的函數(shù)的代碼:
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...
調(diào)用methods函數(shù)返回的結(jié)果是一個(gè)字符串?dāng)?shù)組,包含了那個(gè)對(duì)象上有效的每個(gè)函數(shù)的名字,你也可以認(rèn)為類與散列非常相似,調(diào)用methods函數(shù)就與獲取散列表的鍵值相似。
你若不使用函數(shù)做點(diǎn)事情,你會(huì)覺得它很無趣,為了調(diào)用函數(shù),你還可以使用send函數(shù),如下面這兩條語句都是等效的:
irb(main):003:0> o.inspect
=> "#<Object:0x3f8feb4>"
irb(main):004:0> o.send "inspect"
=> "#<Object:0x3f8feb4>"
通過在你的類中定義method_missing函數(shù),Ruby讓你有機(jī)會(huì)處理未知的函數(shù),如:
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函數(shù)的參數(shù)包括請(qǐng)求的函數(shù)和所有傳遞給那個(gè)函數(shù)的參數(shù),一個(gè)更好的定義如下:
def method_missing(method, *args)
分享:.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 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過程實(shí)現(xiàn)分頁示例代碼
- 相關(guān)鏈接:
- 教程說明:
.Net教程-解析.NET程序員 Ruby核心語法入門(6)
。