日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

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

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

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

Ruby執(zhí)行的某些東西叫做“鴨式輸入”:如果它走起路來像鴨子或聲音也像鴨子,那它一定就是鴨子。你不用問它“你是一只鴨子嗎?”,你只需要將它當做鴨子對它呷呷地叫就可以了,如果你渴望成為一只鴨子,只要你能呷呷地叫的就可以加入這個party。

注意greet函數(shù)定義時沒有對對象的類型做任何限制,因為它只打印它們—Ruby中任何事物都是支持打印的,這得益于to_s類函數(shù)的優(yōu)點,它可以將任何對象轉(zhuǎn)換成字符串,最終結(jié)果就是你可以greet它們。

下面是另一個例子:

irb(main):006:0> def print_len(item)
irb(main):007:1> puts "Len = #{item.length}"
irb(main):008:1> end
=> nil
irb(main):009:0> print_len "Reader"
Len = 6
=> nil
irb(main):010:0> print_len [1, 4, 9]
Len = 3
=> nil
irb(main):011:0> print_len 42
NoMethodError: undefined method <span class="pf">'</span>length' for
42:Fixnum
from (irb):7:in <span class="pf">'</span>print_len'
from (irb):11

這里的print_len函數(shù)做的事情更多了:它調(diào)用了length函數(shù)。因此傳遞給print_len的是length函數(shù)的返回值,可以傳遞一個字符串或一個數(shù)組,因為它們都有對應(yīng)的length函數(shù),但是不能傳遞一個數(shù)字,因為沒有對應(yīng)數(shù)字的length函數(shù)。

為了在.NET中編寫一個類似的函數(shù),你可能需要創(chuàng)建一個IHaveLength接口作為你的參數(shù)類型,由于在你創(chuàng)建接口前類就已經(jīng)創(chuàng)建好了,所以不幸的是,可能你需要創(chuàng)建一個類型轉(zhuǎn)換器。

從另一方面來看,至少你已經(jīng)有了IHaveLength,并且知道函數(shù)需要什么東西,既然類型擔當?shù)氖悄撤N格式文檔的角色,在動態(tài)語言中你需要一個取舍,這樣你會在編寫文檔和單元測試時更自信,可以幫助你識別類或函數(shù)是如何使用的。

Ruby支持默認的參數(shù)值,如:

irb(main):012:0>def repeat(val, times = 5)
irb(main):013:1>val.to_s * times
irb(main):014:1>end
=>nil
irb(main):015:0>repeat "hi"
=>"hihihihihi"
irb(main):016:0>repeat "hi", 3
=>"hihihi"
irb(main):017:0>repeat 10, 3
=>"101010"

注意在to_s * times前面沒有return,除非你明確地告訴它返回什么值,否則Ruby中的函數(shù)總是返回最后一個賦值,因此就不需要return關(guān)鍵字了。

Ruby支持變量參數(shù),如:

irb(main):018:0> def add(*values)
irb(main):019:1> result = 0
irb(main):020:1> values.each {|x| result = x}
irb(main):021:1> result
irb(main):022:1> end
=> nil
irb(main):023:0> add 1, 2, 3, 4, 5
=> 15

Ruby將變量參數(shù)打包成一個數(shù)組,然后你就可以訪問傳遞來的值,并且可以將它們集合到一塊兒。

函數(shù)和變量命名約定

Ruby中的函數(shù)以小寫字母開頭,可以包含字母,數(shù)字和下劃線。改變基礎(chǔ)對象的函數(shù)名稱以一個驚嘆號(!)結(jié)束,例如:upcase函數(shù)返回字符串的大寫,但是還單獨保留了原始字符串;相反,upcase!函數(shù)就真實地改變了基礎(chǔ)字符串。
回答問題(返回布爾值)的函數(shù)名稱以一個問號(?)結(jié)束。

類是來自新對象實例創(chuàng)建時的模板,例如:為了將前面的greet函數(shù)放入一個類,你可能要編寫以下代碼:

irb(main):001:0> class Manners
irb(main):002:1> def greet(name)
irb(main):003:2> puts "Hello, #{name}!"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> m = Manners.new
=> # 前面的代碼創(chuàng)建了一個新的類,叫做Manners,并將函數(shù)greet添加到該類中了,最后,它創(chuàng)建了一個Manners類的實例,使用它greet Reader。

你可能認為在Ruby中類是對象的活動模板,與.NET中的類不同,Ruby中的類是編譯時定義的,你可以對其進行任意擴展,當你完成擴展后,類的現(xiàn)有實例也會立即得到新的反應(yīng),注意當你嘗試告訴它farewell時會發(fā)生什么,如:

irb(main):008:0> m.farewell "Reader"
NoMethodError: undefined method 'farewell' for
#<Manners:0x404839c>
from (irb):8

當你嘗試調(diào)用farewell時,系統(tǒng)會告訴你它不知道這是什么,那么就可以對Manners類進行擴展,讓它知道這么說拜拜,如:

irb(main):009:0>class Manners
irb(main):010:1>def farewell(name)
irb(main):011:2>puts "Goodbye, #{name}!"
irb(main):012:2>end
irb(main):013:1>end
=>nil
irb(main):014:0>m.farewell "Reader"
Goodbye, Reader!
=>nil

擴展了Manners類后,它的已有實例就會立即獲得這個新的功能。

Manners類有兩個函數(shù),兩個都需要你的名字,你可能需要重新編寫它以便你創(chuàng)建它時可以傳遞名字給它,Ruby調(diào)用initialize函數(shù),你傳遞的所有參數(shù)都傳遞給new,下面是更新后的Manners類:

irb(main):001:0> class Manners
irb(main):002:1> def initialize(name)
irb(main):003:2> @name = name
irb(main):004:2> end
irb(main):005:1> def greet
irb(main):006:2> puts "Hello, #{@name}!"
irb(main):007:2> end
irb(main):008:1> def farewell
irb(main):009:2> puts "Goodbye, #{@name}!"
irb(main):010:2> end
irb(main):011:1> end
=> nil
irb(main):012:0> m = Manners.new "Reader"
=> #

分享:.NET Framework 3.5 SP1正式版
微軟今天發(fā)布了.NET Framework 3.5第一個SP服務(wù)包的最終版.這是一個累積更新,包含很多基于.NET Framework 2.0、3.0和3.5不斷生成的新功能,此外還包括.NET Framework 2.0 SP2和.NET Framewo

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