基本语法,请参考相关书籍,这里只是对ruby进行一个概括的解读
包含其它的文件
这里讲的功能就好比java中的import功能,在ruby中使用如下的语法:
load"filename.rb" require"filename" |
require是一个“executablestatement”,所以它就好像一个函数一样,可以被放到if语句中,
参数也可以是按某种条件临时生成的文件名。
如下是一段英文解释:
TheloadmethodincludesthenamedRubysourcefileeverytimethemethodisexecuted,
whereasrequireloadsanygivenfileonlyonce.requirehasadditionalfunctionality:itcan
loadsharedbinarylibraries.
Modules概念
Modeles其实就是一个命名空间,其中可以包含方法、类、常量等。下面是Modules的英文概念:
Modulesareawayofgroupingtogethermethods,classes,andconstants.Modulesgiveyoutwo
majorbenefits:
1Modulesprovideanamespaceandpreventnameclashes.
2Modulesimplementthemixinfacility.
下面是一个例子:
ModuleNotes |
异常的概念
异常在所有的语言中都是比较重要的一个内容。
先看一段异常处理的简单代码:
f=File.open("testfile") begin #..process rescue #..handleerror else puts"Congratulations--noerrors!" ensure f.closeunlessf.nil? end |
现在以Java的类比来解释Ruby的异常:
Ruby |
| Java |
begin | --》 | try |
rescue | --》 | catch |
ensure | --》 | Finally |
else |
| Java中没有 |
接住具体异常的代码如下:
begin evalstring rescueSyntaxError,NameError=>boom print"Stringdoesn'tcompile:"+boom rescueStandardError=>bang print"Errorrunningscript:"+bang end |
抛出异常:
raise raise"badmp3encoding" raiseInterfaceException,"Keyboardfailure",caller |
线程的概念
线程的简单的例子
代码如下:
param="hello,world" Thread.new(param){ puts"I'mrunningthread,andtheparamsis:"+param } |
说明:Ruby中的线程创建就立即运行,没有像java那样只有调用了start方法才开始启动。
但是如下的代码起到了java中的效果:
param="hello,world" t=Thread.new(param){ Thread.stop puts"I'mrunningthread,andtheparamsis:"+param } ... t.run |
多线程和线程变量的例子:
count=0 arr=[] 10.timesdo|i| arr[i]=Thread.new{ sleep(rand(0)/10.0) Thread.current["mycount"]=count count+=1 } end arr.each{|t|t.join;printt["mycount"],","} puts"count=#{count}" |
说明:
1.线程中可以使用线程的变量,Thread.current,它是一个hash
2.t.join方法能够确保在在主程序退出前运行完所有的执行了join的线程,相关英文解释如下:
WhenaRubyprogramterminates,allrunningthreadsarekilled,regardlessoftheirstates.
However,youcanwaitforaparticularthreadtofinishbycallingthatthread'sThread#joinmethod.
Thecallingthreadwillblockuntilthegiventhreadisfinished.Bycallingjoinoneachofthe
requestorthreads,youcanmakesurethatallthreerequestshavecompletedbeforeyouterminate
themainprogram.