亚洲喷奶水中文字幕电影,日本aⅴ高清一区二区三区,欧美亚洲日本国产,欧美日韩亚洲中文字幕

<legend id="flx4p"><abbr id="flx4p"><thead id="flx4p"></thead></abbr></legend>

<mark id="flx4p"><thead id="flx4p"></thead></mark>

      我要投稿 投訴建議

      三道Ruby面試試題

      時間:2022-08-04 15:11:19 面試試題 我要投稿
      • 相關(guān)推薦

      三道Ruby面試試題

        一、Ruby如何進(jìn)行文件操作

      三道Ruby面試試題

        Ruby使用File類來操作文件,可以通過File.new來創(chuàng)建一個File類的實(shí)例并打開這個文件。

        file = File.new(“testfile”, “r”)

        # … process the file

        file.close

        testfile是想要操作的文件名,”r”說明了文件的操作模式為讀取?梢允褂”w”表示寫入,”rw”表示讀寫。

        最后要記得關(guān)閉打開的文件,確保所有被緩沖的數(shù)據(jù)被寫入文件,所有相關(guān)的資源被釋放。

        也可以使用File.open來打開文件,open和new的不同是open可以使用其后的代碼塊而new方法則返回一個File類的實(shí)例。

        File.open(“testfile”, “r”) do |file|

        # … process the file

        end

        open操作的另一個優(yōu)點(diǎn)是處理了異常,如果處理一個文件發(fā)生錯誤拋出了

        異常的話,那么open操作會自動關(guān)閉這個文件,下面是open操作的大致實(shí)現(xiàn):

        class File

        def File.open(*args)

        result = f = File.new(*args)

        if block_given?

        begin

        result = yield f

        ensure

        f.close

        end

        end

        return result

        end

        end

        對于文件的路徑,Ruby會在不同的操作系統(tǒng)間作轉(zhuǎn)換。例如,在Windows下,/ruby/sample/test.rb會被轉(zhuǎn)化為\ruby\sample\test.rb。當(dāng)你使用字符串表示一個Windows下的文件時,請記住使用反斜線先轉(zhuǎn)義:

        “c:\\ruby\\sample\\test.rb”

        也可以使用File::SEPARATOR表示不同系操作統(tǒng)的路徑分割符。

        二、Ruby如何創(chuàng)建一個線程

        可以使用Thread.new方法去創(chuàng)建一個線程,可以隨后代碼塊中列出線程執(zhí)行的代碼:

        x = Thread.new { sleep 0.1; print “x”; print “y”; print “z” }

        a = Thread.new { print “a”; print “b”; sleep 0.2; print “c” }

        執(zhí)行結(jié)果為:

        ab

        上面的示例程序中使用Thread.new創(chuàng)建了二個線程,線程隨即開始運(yùn)行。但是運(yùn)行結(jié)果很奇怪,為什么程序運(yùn)行結(jié)果是“ab”呢?我們預(yù)期的執(zhí)行結(jié)果應(yīng)該是 “abxyzc”。

        當(dāng)Ruby程序執(zhí)行完畢的時候,他會殺掉所有的線程,不管其它的線程的運(yùn)行狀態(tài)如何。如果沒有使用join方法,那么主程序執(zhí)行完畢后會把所有沒有執(zhí)行完畢的線程殺掉。

        上面的實(shí)例程序中,當(dāng)主程序運(yùn)行完畢時,兩個線程都沒有運(yùn)行結(jié)束就被中止掉了。我們可以使用join方法來讓主程序等待某個特定線程結(jié)束,對每一個線程使用join方法,可以確保在程序結(jié)束前所有的線程可以運(yùn)行完畢。

        x = Thread.new { sleep 0.1; print “x”; print “y”; print “z” }

        a = Thread.new { print “a”; print “b”; sleep 0.2; print “c” }

        x.join

        a.join

        我們使用Thread.new方法創(chuàng)建兩個新的線程并開始運(yùn)行, 然后使用join方法等待線程結(jié)束。執(zhí)行結(jié)果為:

        abxyzc

        可以看到通過使用join方法等待線程結(jié)束,程序運(yùn)行結(jié)果和我們預(yù)期結(jié)果相符。

        另一個例子:

        x = Thread.new { sleep 0.1; print “x”; print “y”; print “z” }

        a = Thread.new { sleep 0.1; print “a”; print “b”; sleep 0.2; print “c” }

        執(zhí)行沒有任何輸出,因?yàn)橹鞒绦驁?zhí)行完畢殺死兩個線程的時候這兩個線程沒有運(yùn)行到輸出語句。

        也可以給join方法添加時間用來指明最大等待時間。如果超時join返回nil。

        x = Thread.new { sleep 0.1; print “x”; print “y”; print “z” }

        a = Thread.new { sleep 0.1; print “a”; print “b”; sleep 10; print “c” }

        x.join(5)

        a.join(5)

        執(zhí)行結(jié)果為:

        abxyz

        上面的例子中對于每一個線程的最大等待時間是5秒,由于a線程需要執(zhí)行10秒以上,所以a線程沒有運(yùn)行完畢程序就將返回。

        三、ruby如何進(jìn)行集成操作?Ruby能進(jìn)行多重繼承嗎?

        Ruby繼承的語法很簡單,使用 < 即可。

        Ruby語言只支持單繼承,每一個類都只能有一個直接父類。這樣避免了多繼承的復(fù)雜度。但同時,Ruby提供了mixin的機(jī)制可以用來實(shí)現(xiàn)多繼承。

        可以使用super關(guān)鍵字調(diào)用對象父類的方法,當(dāng)super省略參數(shù)時,將使用當(dāng)前方法的參數(shù)來進(jìn)行調(diào)用。