国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Ruby > 正文

使用Eclipse+RDT插件進(jìn)行Ruby開(kāi)發(fā)

2024-07-21 02:14:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  簡(jiǎn)介 本文介紹如何在eclipse中使用ruby開(kāi)發(fā)工具(rdt)插件進(jìn)行ruby開(kāi)發(fā)。本文將有益于那些想學(xué)習(xí)如何使用eclipse基礎(chǔ)架構(gòu)來(lái)進(jìn)行ruby開(kāi)發(fā)的ruby開(kāi)發(fā)者,也有益于對(duì)ruby開(kāi)發(fā)感興趣的java開(kāi)發(fā)者。

  一、 為什么使用ruby?

  現(xiàn)在,為什么眾多的java開(kāi)發(fā)者都關(guān)注ruby?ruby,是10年以前在日本創(chuàng)建的一種通用目的腳本語(yǔ)言,這是一種純面向?qū)ο蟮恼Z(yǔ)言。不同于java技術(shù),ruby中的一切都是對(duì)象。ruby的語(yǔ)法主要來(lái)源于smalltalk,python和ada。象java編程語(yǔ)言一樣,ruby是一種單繼承的語(yǔ)言,但是它提供了一些java技術(shù)所沒(méi)有實(shí)現(xiàn)的高級(jí)特征,例如閉合(可以認(rèn)為是一種匿名的內(nèi)部類(lèi))和mix-in(類(lèi)似于接口,但是較松地綁定于類(lèi)上)。ruby也是高度可移植的,能夠運(yùn)行在所有主流的操作系統(tǒng)之上。

  現(xiàn)在,ruby正十分熱門(mén)。人們正在開(kāi)始把它應(yīng)用于各種類(lèi)型的應(yīng)用程序。因?yàn)樗墙忉屝筒⑶沂褂脛?dòng)態(tài)類(lèi)型化,所以你可以在運(yùn)行時(shí)刻實(shí)現(xiàn)在java中很難實(shí)現(xiàn)的技巧。由動(dòng)態(tài)類(lèi)型化和富于表達(dá)的語(yǔ)法所實(shí)現(xiàn)的令人吃驚的能力之一是它能夠用ruby創(chuàng)建域特定的語(yǔ)言(dsl)-它們?cè)试S你在更高級(jí)別的抽象層上工作,從而遠(yuǎn)離最原始的語(yǔ)言語(yǔ)法。ruby on rails是一種創(chuàng)建基于數(shù)據(jù)庫(kù)支持的web應(yīng)用程序的框架,這也展示了ruby的力量。rake,作為ruby的make和ant合二為一的版本,是這種語(yǔ)言強(qiáng)有力的應(yīng)用的又一個(gè)證明。

  使用ruby的另一個(gè)原因是,所有的編程發(fā)燒友都在使用它。現(xiàn)在,許多java高手(如glenn vanderburg,bruce tate和martin fowler)都在使用ruby。即使你不打算把你的所有開(kāi)發(fā)轉(zhuǎn)向ruby,這種語(yǔ)言也值得你瀏覽一番。

  限制ruby發(fā)展的主要因素之一是,它缺乏一個(gè)良好的開(kāi)發(fā)環(huán)境(對(duì)于那些不想學(xué)習(xí)emacs的用戶(hù)來(lái)說(shuō))。如今,rdt改變了這一切,而使用eclipse對(duì)此進(jìn)行試驗(yàn)則最好不過(guò)。

  二、 安裝

  在使用ruby之前,你必須安裝ruby解釋器,相應(yīng)的庫(kù)和ruby開(kāi)發(fā)環(huán)境。

  三、 取得ruby

  ruby可用于所有主要的平臺(tái)上。事實(shí)上,你的linux或cygwin分發(fā)包中可能已經(jīng)包含了它。請(qǐng)打開(kāi)一個(gè)命令提示符,然后輸入"ruby-v"。
如果你得到一個(gè)版本號(hào),那么你已經(jīng)準(zhǔn)備好。否則,你需要檢查你所選擇的平臺(tái)的分發(fā)包。

  如果你正在運(yùn)行windows,則選擇更容易。rubyforge,作為sourceforge上的ruby特定的等價(jià)物,有一個(gè)工程稱(chēng)為one-click ruby installer,這個(gè)程序用于在windows平臺(tái)上搭建ruby環(huán)境。它還包括另外一些工具,如一個(gè)稱(chēng)為freeride的ide;但是如果你使用rdt的話(huà),你在安裝過(guò)程中可以跳過(guò)這些這項(xiàng)。

  四、 取得文檔

  當(dāng)你開(kāi)始使用一種新語(yǔ)言時(shí),文檔及有關(guān)參考材料是至關(guān)重要的。你可以在主ruby網(wǎng)站得到ruby文檔的在線(xiàn)參考材料,但是你會(huì)發(fā)現(xiàn)這些文檔有點(diǎn)過(guò)時(shí)(它們是針對(duì)于ruby 1.6版本的,而當(dāng)前版本是1.8.2)。問(wèn)題是,更新的文檔目前還沒(méi)有從日語(yǔ)翻譯過(guò)來(lái)。然而,你可以在ruby-doc.org上找到最新的幫助文檔。它包括api級(jí)的文檔(javadoc的等價(jià)物),還有其它一些教程和書(shū)籍。

  如果你是一位嚴(yán)肅的ruby開(kāi)發(fā)者,那么你應(yīng)該閱讀一下《programming ruby:the pragmatic programmer's guide》(作者是dave thomas和andy hunt)一書(shū)以取得最佳編程效果。這是一本有關(guān)ruby及ruby庫(kù)編程的經(jīng)典指南。如果你得到此書(shū),那么你還可以參考也是dave thomas編寫(xiě)的《agile development with ruby on rails》一書(shū)。這是一本有關(guān)ruby on rails的入門(mén)性書(shū)籍。

  五、 得到rdt

  現(xiàn)在,既然你在自己的計(jì)算機(jī)上安裝了一個(gè)可工作的具有良好幫助文檔的ruby,那么接下來(lái)你需要安裝rdt了。這是一個(gè)eclipse插件,它提供了許多你可能在編輯代碼時(shí)已習(xí)慣的特征。rdt是一個(gè)標(biāo)準(zhǔn)的eclipse插件;因此,你可以直接把壓縮文件解壓到eclipse文件夾下,由文檔中的路徑來(lái)處理其它一切。

  現(xiàn)在,你已經(jīng)準(zhǔn)備好創(chuàng)建一個(gè)ruby工程了(見(jiàn)圖1)。


圖1.創(chuàng)建一個(gè)新的ruby工程

  與java相比,ruby在命名和目錄結(jié)構(gòu)方面要求并不嚴(yán)格。在ruby中創(chuàng)建一個(gè)工程實(shí)際上只創(chuàng)建一個(gè)目錄和一個(gè)工程文件(不需要.classpath文件,因?yàn)閞uby沒(méi)有classpath)。另外一個(gè)與java技術(shù)的顯著區(qū)別是,ruby工程向?qū)Р⒉粍?chuàng)建顯式的src和bin目錄。ruby是解釋型的,因此沒(méi)有輸出文件夾。如果你有一個(gè)小工程,那么你可以把ruby源文件放在與工程文件相同的文件夾下。作為選擇,你還可以創(chuàng)建你自己的目錄層次。你會(huì)發(fā)現(xiàn),與java相比,ruby很少關(guān)心這些。

  接下來(lái),你將創(chuàng)建一個(gè)ruby源文件。沒(méi)有特定的向?qū)в糜趧?chuàng)建一個(gè)ruby源文件。與java技術(shù)相比,ruby源文件中僅需要較少的結(jié)構(gòu),所以,為了創(chuàng)建一個(gè)ruby文件,你需要右擊工程來(lái)創(chuàng)建一個(gè)新文件(見(jiàn)下圖2)。


圖2.創(chuàng)建一個(gè)ruby源文件

  別忘記把標(biāo)準(zhǔn)擴(kuò)展名.rb添加到該文件(它是正常的ruby擴(kuò)展名)。創(chuàng)建一個(gè)ruby文件應(yīng)該會(huì)打開(kāi)如圖3所示的ruby視圖。


圖3.創(chuàng)建一個(gè)ruby文件將啟動(dòng)ruby視圖

  ruby還提供了一個(gè)outline視圖(類(lèi)似于java提供的那種)。就象它的java對(duì)應(yīng)物一樣,它允許你在ruby源文件的元素之間進(jìn)行導(dǎo)航。在圖4中,raise_salary_by方法在outline和源碼視圖中都被加亮。


圖4.這個(gè)outline視圖實(shí)現(xiàn)在源文件中的導(dǎo)航

  就象其它復(fù)雜的插件一樣,rdt也允許通過(guò)"window>preferences"對(duì)話(huà)框增加定制特征。這個(gè)定制對(duì)話(huà)框見(jiàn)圖5。


圖5.rdt安裝"preferences"以便實(shí)現(xiàn)定制

  參數(shù)選擇"preferences"菜單項(xiàng)允許你改變語(yǔ)法加亮,格式化(ruby世界中的標(biāo)準(zhǔn)縮進(jìn)是兩個(gè)空格,而不是四個(gè)空格,所以請(qǐng)準(zhǔn)備好作一些調(diào)整),等等。它還允許你定制編輯器模板并選擇你自己的解釋器。

  六、 rdt編輯器

  在java世界中,我們已習(xí)慣于高級(jí)編輯器特征-這使得在轉(zhuǎn)到其它不提供同樣支持的其它環(huán)境時(shí)比較困難。ruby ide中所缺乏的特征之一是沒(méi)有提供內(nèi)容助手(它能夠提供上下文相關(guān)的標(biāo)識(shí)符查找功能)。幸好,rdt編輯器中含有針對(duì)ruby代碼的內(nèi)容助手,見(jiàn)下圖6。


圖6.rdt編輯器提供了內(nèi)容助手

  在ruby中,你不能把一種類(lèi)型賦值給一個(gè)變量或一個(gè)方法的返回,而由標(biāo)識(shí)符上下文確定在運(yùn)行時(shí)刻的類(lèi)型。ruby中引入了一種被親切地稱(chēng)為"duck typing"的方法。這種方法的思想是,如果它接受一個(gè)假(quack)消息,那么它必須是一個(gè)"duck"。這看起來(lái)似乎妨礙了那些已經(jīng)習(xí)慣了強(qiáng)類(lèi)型化語(yǔ)言的用戶(hù),這種松散類(lèi)型耦合能夠支持ruby語(yǔ)言中一些更強(qiáng)有力的特征。例如,你可以用ruby編寫(xiě)一個(gè)異常處理器-當(dāng)你調(diào)用一個(gè)并不存在的方法時(shí)激活它,然后由該異常處理處理器來(lái)自由分析這個(gè)方法,然后再調(diào)用它。這種元編程級(jí)在強(qiáng)類(lèi)型化語(yǔ)言中是很難實(shí)現(xiàn)的。

  針對(duì)內(nèi)容助手的一個(gè)挽回特征是,ruby在使用標(biāo)識(shí)符時(shí)使用特定的命名慣例。例如,在ruby中,所有的成員變量在第一次使用它們時(shí)就存在,并且全部由一個(gè)@符號(hào)所標(biāo)識(shí),作為其名字的第一個(gè)字符。如果你使用內(nèi)容助手查找成員變量,那么你可以輸入@,這樣以來(lái)你就只能看見(jiàn)成員變量了。


圖7.在ruby幫助內(nèi)容助手中的命名慣例

  動(dòng)態(tài)類(lèi)型化仍然妨礙在ruby中的上下文敏感問(wèn)題。在圖7中,唯一有效的成員變量是正好出現(xiàn)在方法聲明上面的那些,也就是@name,@salary和@hire_year。內(nèi)容助手所提供的另外一些成員來(lái)自于另一個(gè)類(lèi)(后面定義)。目前,rdt編輯器還不足夠復(fù)雜以過(guò)濾所有的正確語(yǔ)法但語(yǔ)義上不正確的入口。

  七、 運(yùn)行與調(diào)試

  ide的特色之一是在同一個(gè)環(huán)境下運(yùn)行和調(diào)試你構(gòu)建的應(yīng)用程序。rdt能夠啟用這兩項(xiàng)功能。

  八、 指定一個(gè)解釋器

  這一任務(wù)的實(shí)現(xiàn)位于ruby上部和"installed interpreters"入口的"windows>preferences"對(duì)話(huà)框中。
ruby是一種解釋性的語(yǔ)言,因此,在rdt能夠運(yùn)行或調(diào)試你的應(yīng)用程序之前,你必須把一個(gè)解釋器與你的環(huán)境關(guān)聯(lián)。這種關(guān)聯(lián)位于ruby頂部的"windows>preferences"對(duì)話(huà)框中的"installed interpreters"入口處。


圖8.把一個(gè)ruby解釋器與環(huán)境相關(guān)聯(lián)

  對(duì)于你正在使用的ruby版本,你要把"location"文本域指向bin目錄,之后由rdt來(lái)選取所有其它所需要的信息。一旦你關(guān)聯(lián)了解釋器,那么你就為運(yùn)行應(yīng)用程序作好了準(zhǔn)備。

  九、 運(yùn)行ruby應(yīng)用程序

  運(yùn)行一個(gè)ruby應(yīng)用程序?qū)嶋H上類(lèi)似于運(yùn)行一個(gè)java應(yīng)用程序。你可以使用run菜單來(lái)創(chuàng)建一個(gè)run配置,見(jiàn)下圖9。


圖9.在rdt中建立一個(gè)run配置

  當(dāng)你運(yùn)行應(yīng)用程序時(shí),rdt將把控制切換到ruby解釋器,然后在eclipse工作區(qū)底部的控制臺(tái)窗口內(nèi)運(yùn)行應(yīng)用程序,見(jiàn)下圖10。


圖10.在rdt內(nèi)運(yùn)行一個(gè)ruby應(yīng)用程序

  這個(gè)實(shí)例顯示了運(yùn)行一個(gè)控制臺(tái)應(yīng)用程序,但是運(yùn)行其它類(lèi)型的應(yīng)用程序(如gui程序)的方式與此相同。

  十、 用rdt調(diào)試

  一個(gè)ide要求實(shí)現(xiàn)的最關(guān)鍵的特征之一是有效地調(diào)試你的應(yīng)用程序的能力。ruby解釋器包括一個(gè)命令行調(diào)試器,但是,在如今的圖形工具時(shí)代有誰(shuí)會(huì)使用一個(gè)命令行調(diào)試器?幸好,ruby解釋器還通過(guò)一特定(可配置)端口來(lái)廣播其調(diào)試信息,而就象rdt這樣的工具能夠聽(tīng)取該端口并且提供開(kāi)發(fā)者們期望的調(diào)試支持類(lèi)型。

  為了在rdt中調(diào)試一個(gè)ruby應(yīng)用程序,我們要象上面創(chuàng)建的run配置一樣創(chuàng)建一個(gè)debug配置。然后,你可以通過(guò)點(diǎn)擊左邊的溝槽設(shè)置一個(gè)斷點(diǎn)并使用調(diào)試器來(lái)啟動(dòng)應(yīng)用程序。就象在java技術(shù)中一樣,ide將詢(xún)問(wèn)你,是否你想要切換到調(diào)試視圖下。如果你愿意,則你將看見(jiàn)類(lèi)似下面圖11所示的內(nèi)容:


圖11.在rdt中調(diào)試ruby應(yīng)用程序

  rdt中支持與java技術(shù)調(diào)試相同的調(diào)試級(jí)別。左上邊的格子顯示出當(dāng)前執(zhí)行的線(xiàn)程,右上面的格子顯示出變量的值。就象在java編程語(yǔ)言中一樣,你可以進(jìn)一步分析對(duì)象以觀(guān)看它們內(nèi)在的成員變量值。中間左邊的格子顯示當(dāng)前正運(yùn)行的應(yīng)用程序的源代碼,中間右邊的格子顯示outline視圖-它在這里擔(dān)當(dāng)編輯器的作用,允許你通過(guò)點(diǎn)按一個(gè)標(biāo)識(shí)符來(lái)進(jìn)行導(dǎo)航。debug窗口的底部顯示出ruby解釋器在端口1098上廣播的調(diào)試信息,而由rdt在該端口上聽(tīng)取調(diào)試信息。

  調(diào)試器支持是rdt的特色。就算你有一個(gè)具有優(yōu)秀的ruby支持的編輯器,你仍然必須依靠命令行調(diào)試器來(lái)調(diào)試你的應(yīng)用程序。擁有一個(gè)具有全面功能的調(diào)試器將會(huì)大大提高軟件的生產(chǎn)效率。

  十一、 測(cè)試

  作為java開(kāi)發(fā)者最難實(shí)現(xiàn)的ruby特征之一是動(dòng)態(tài)類(lèi)型化。如果你習(xí)慣于一種強(qiáng)類(lèi)型化語(yǔ)言,那么動(dòng)態(tài)類(lèi)型化看上去似乎有點(diǎn)混亂。dt允許各種高級(jí)元編程技巧-這在一種強(qiáng)類(lèi)型化語(yǔ)言中是很難或不可能實(shí)現(xiàn)的。當(dāng)然,你可以放棄編譯時(shí)刻類(lèi)型檢查的安全設(shè)置。那么,是否有一個(gè)方法能夠?qū)崿F(xiàn)兩種世界的最佳結(jié)合呢?

  單元測(cè)試應(yīng)該是每一種語(yǔ)言必須實(shí)現(xiàn)的,但是它在動(dòng)態(tài)語(yǔ)言中特別關(guān)鍵。單元測(cè)試比編譯揭示了更多的內(nèi)容。事實(shí)上,你應(yīng)該改變?cè)趩卧獪y(cè)試和編譯之間的關(guān)系上的觀(guān)點(diǎn)。最近,一位高級(jí)軟件開(kāi)發(fā)專(zhuān)家認(rèn)為,"在今后的五年內(nèi),我們會(huì)把編譯作為單元測(cè)試的一種弱的實(shí)現(xiàn)形式"。單元測(cè)試能夠提供證實(shí)(verification)-編碼將如期實(shí)現(xiàn),而不是僅僅進(jìn)行你輸入內(nèi)容的語(yǔ)法檢查。

  考慮到單元測(cè)試在ruby世界中的極端重要性,你一定會(huì)希望rdt能夠使得單元測(cè)試易于運(yùn)行。的確如此!單元測(cè)試被包括在ruby內(nèi),因此你不必下載任何其它的擴(kuò)展。ruby庫(kù)中包括了一個(gè)testcase類(lèi)和一個(gè)testsuite的概念。你可以象創(chuàng)建任何另外的ruby類(lèi)一樣來(lái)創(chuàng)建你的單元測(cè)試,從test::unit::testcase中子類(lèi)化你的測(cè)試。列表1是一個(gè)employee類(lèi)的實(shí)例。

  列表1.employee類(lèi)

class employee
 def initialize(name, salary, hire_year)
  @name = name
  @salary = salary
  @hire_year = hire_year
 end
 attr_reader :name, :salary, :hire_year
 def raise_salary_by(perc)
  @salary += (@salary * (perc * 0.01))
 end
 def to_s
  "name is #{@name}, salary is #{@salary}, " + "hire year is #{@hire_year}"
 end
end

  相應(yīng)的單元測(cè)試如下:

  列表2.相應(yīng)于employee類(lèi)的單元測(cè)試

require 'test/unit/testcase'
require 'test/unit/autorunner'
require 'hr'
class testemployee < test::unit::testcase
 @@test_salary = 2500
 def setup
  @emp = employee.new("homer", @@test_salary, 2003)
 end
 def test_raise_salary
  @emp.raise_salary_by(10)
  expected = (@@test_salary * 0.10) + @@test_salary
  assert( expected == @emp.salary)
 end
end

  為了運(yùn)行這個(gè)單元測(cè)試,你可以為該單元測(cè)試類(lèi)創(chuàng)建一個(gè)run配置-作為一個(gè)test::unit類(lèi)型,見(jiàn)圖12。


圖12.rdt包括一個(gè)test::unit run配置

  當(dāng)你運(yùn)行這個(gè)測(cè)試時(shí),你會(huì)得到與java單元測(cè)試相同的支持元素,包括在左下角的類(lèi)junit格子。


圖13.運(yùn)行于ide中的一個(gè)單元測(cè)試的例子

  你還可以在ruby中創(chuàng)建testsuites。testsuites是ruby類(lèi),它定義一個(gè)返回testsuite的suite方法。這個(gè)testsuite由自動(dòng)地在每個(gè)testcases中定義的suite組成。列表3是針對(duì)幾個(gè)類(lèi)的一個(gè)示例testsuite。

  列表3.一些類(lèi)的示例testsuite

require 'test/unit/testsuite'
require 'test/unit/ui/tk/testrunner'
require 'test/unit/ui/console/testrunner'
require 'testemployee'
require 'testmanager'
class testsuite_alltests
 def self.suite
  suite = test::unit::testsuite.new("hr tests")
  suite << testemployee.suite
  suite << testmanager.suite
  return suite
 end
end
#test::unit::ui::tk::testrunner.run(testsuite_alltests)
test::unit::ui::console::testrunner.run(testsuite_alltests)

  不同于前面運(yùn)行單個(gè)testcase的實(shí)例,這里的suite作為一獨(dú)立的應(yīng)用程序運(yùn)行。ruby有兩個(gè)方法可以顯示testsuite的結(jié)果。第一個(gè)是"console test runner"-它在控制臺(tái)輸出它的結(jié)果。第二個(gè)是"tk testrunner",它創(chuàng)建一個(gè)熟悉的對(duì)話(huà)框來(lái)顯示測(cè)試的結(jié)果。圖14顯示了一個(gè)tk testsuite對(duì)話(huà)框。


圖14.圖形式的testsuite對(duì)話(huà)框

  十二、 新版本中的改進(jìn)

  rdt的當(dāng)前版本是0.50。目前,其開(kāi)發(fā)者正在開(kāi)發(fā)0.60版本。下一個(gè)版本中將改進(jìn)的方面包括:

  · 代碼折疊功能-提供針對(duì)類(lèi)和方法的代碼折疊功能。

  · outline視圖-提供更詳細(xì)的信息,包括對(duì)局部變量的支持。

  · ri視圖-從一個(gè)rdt視圖中使用ruby的ri工具。

  · 任務(wù)標(biāo)簽-以ruby注釋形式為可配置的關(guān)鍵字(如todo,fixme)創(chuàng)建任務(wù)。

  · 編輯器方面的改進(jìn)-自動(dòng)添加大括號(hào),圓括號(hào)和單/雙引號(hào);還有更好的代碼助手。

  · 檢查器快捷方式-在一個(gè)調(diào)試會(huì)話(huà)期間,針對(duì)經(jīng)常使用的檢查器提供可配置的快捷方式,如顯示一個(gè)對(duì)象的所有方法,全局常量,等等。

  接下來(lái)的版本將更好地使用jruby字節(jié)碼編譯器。jruby是一項(xiàng)工程,它允許把ruby代碼編譯為java字節(jié)碼。這意味著,rdt的以后版本將更容易地加入到eclipse世界中,甚至提供更好的支持。

   十三、 總結(jié)

  ruby最終為業(yè)界人士所廣泛認(rèn)可和應(yīng)用。其中,部分原因應(yīng)該歸功于ruby on rails工程的成功的驅(qū)動(dòng)。如今,已經(jīng)到了考慮如何把ruby加入到你的"競(jìng)爭(zhēng)工具箱"中的時(shí)候了。當(dāng)然,rdt也是吸引你加入這一領(lǐng)域的一個(gè)重要因素。



發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐安县| 宿迁市| 基隆市| 安陆市| 米脂县| 德兴市| 凤阳县| 平塘县| 凤凰县| 西乌珠穆沁旗| 无为县| 乌鲁木齐县| 特克斯县| 文登市| 藁城市| 政和县| 芮城县| 昭平县| 隆德县| 安泽县| 项城市| 华容县| 华亭县| 囊谦县| 贵州省| 佛坪县| 洱源县| 县级市| 连州市| 平谷区| 清新县| 磐安县| 泽普县| 文化| 梁平县| 华亭县| 溧阳市| 玉环县| 依安县| 鲁山县| 光泽县|