標籤:style blog ar color os 使用 sp for java
#Ruby內建基礎資料類型 NilClass,TureClass,FalseClass,Time,Date,String,Range,Struct,Array,Hash#Numerice 1.分為Interger整數類。Interger又分為Fixnum和Bignum。#2.#Float浮點數#3.Complex複數。#Bury的動態特性 #1.動態執行字串形式的代碼 eval#2.動態獲得模組或類中的常量和變數的值#3.動態為類或對象添加方法#4.對為知變數和方法的動態處理#5.動態刪除定義#eval編譯並執行字串。javascript的eval=beginclass_eval 在類的上下文範圍內將字串作為代碼編譯執行module_eval 在類或者模組的上下文範圍內將字串作為代碼編譯執行instance_eval 是在執行個體的上下文範圍內編譯執行=endclass String PI="fjskdjf" def dosome(n) self[0,n]+(self.size > n ? ".." : "")#空格不可忽略=_=|| end for i in [5,6,7,8] module_eval "def dosome_#{i} dosome(#{i}) end " endendputs "sdfsdf".dosome_5puts "sdfdsfsdf".dosome_6puts "gsfsdf".upcase puts "sdfsdf".send("upcase")#send方法動態調用對象的方法#puts "sadfd".methods#puts String.methods #擷取對象的所有方法名#instance_methods 返回所有公開的執行個體方法名,protected_methods返回的是受保護的方法名puts String.method_defined?(:upcase)#檢查對象是否定義了某執行個體方法puts "String".respond_to?(:upcase)#檢查對象是否能相映某執行個體方法的調用 puts String.const_get("PI")#根據常量的名稱擷取模組貨類中常量的值puts String::PI#const_missing,method_missing 方法,當對象調用不存在的方法或者常量的時候可以自訂返回的錯誤資訊。array=[1,3,4,5,22,33]array<<[1,44,5,6,7]#添加元素array.push([333,1234,1233333])#添加元素array.each { |item| puts item}
lambda和proc,block
def test(arg,arg2,&block) #把方法的參數處理後傳遞給代碼塊的參數 yield arg+arg2,"代碼塊的第二個參數"#佔了兩個位,所以下面調用都會輸出2次,代碼塊其實是Proc對象 yield arg+arg2,"第二個參數"#這裡的yield其實就相當與下面的作用 block.call(arg+arg2,"proc對象第二個參數")end#test(11) {puts "yield佔位"}#test do# puts "今天是個好日子"#end#代碼塊 的兩種建立方式{ 代碼 } ,do 代碼 endtest("啥玩意兒","恩德") {|x,y| puts x+y}block=Proc.new{|o,x| puts o+x+"Proc方法"}test("啥啥","正規軍",&block)#代碼塊的參數用|參數|傳遞。yield (x,y)給代碼塊傳遞參數#使用proc方法的好處是能感覺到給方法傳遞了代碼塊參數,proc對象做方法傳遞是要加上&符號def f0() p = Proc.new { return 0} p.call 1enddef f1() l = lambda { return 0} l.call 1endf0 # 返回0f1 # 返回1#如果你能夠理解proc在行為上更像block,lambda其實就是方法只不過是匿名的,那麼你對上面的結果不會感到驚訝。#如果把f0,f1做一些修改,就更容易理解上面的結果了。def f0() return 0 1enddef f1() def __f1 return 0 end __f1 1endf0 # 返回0f1 # 返回1
異常處理
def extest(x,y) begin#try z=x/y rescue =>err#catch puts err #retry 恢複重來 ensure#finaly puts "操作完畢" end endextest(1,0)
Ruby基礎類型,動態特性,代碼塊