国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
ruby語法
 

(一)Ruby中一切都是對象,包括一個常數.
比如可以用.class屬性來查看一個對象的類型,你可以看下1.class,會發(fā)現(xiàn)常數1的類型是Fixnum,1不過是Fixnum的一個實例。還可以使用-37這個Fixnum的實例方法abs來取得絕對值:-37.abs()會返回37
又如輸入一個1.1.class,會返回Float。

(二)Ruby語法
Ruby中的類以class開始 以end結束,類名首字母的約定是大寫。
Ruby中的方法以def開始 以end結束,方法名首字母的約定是小寫。
Ruby中的局部變量名首字母的約定是小寫。
Ruby中的構造函數名稱為initialize。
Ruby中的成員變量(實例變量)前導@符,在initialize里進行聲明與初始化。
Ruby中的屬性用attr_writer和attr_reader聲明,分別對應c#的set,get,使用了attr_accessor是可讀也可寫
Ruby中的全局變量前導$符。
Ruby中的常數(常量)用大寫字母開頭,約定是全部大寫。

Ruby中任何的表達式都會返回值,sample

class Rectangle
  
def initialize(wdth, hgt)
    @width 
= wdth
    @height 
= hgt
  end
  
def width=(wdth)
    @width 
= wdth
  end
  
end

= Rectangle.new(2,3)
puts r.width 
= 5 #output 5
puts r.width # error! because the width not support read

繼續(xù)補充下attr_accessor的使用,sample


class Rectangle
  attr_accessor :width
  attr_accessor :height
  attr_accessor :width2
  attr_accessor :height2
  
  
def initialize(wdth, hgt)
    @width 
= wdth
    @height 
= hgt
  end
  
  
def area()
    
return @width * @height
  end
  
  
def area2()
    
return @width2 * @height2
  end
  
  
end

= Rectangle.new(2,3)
r.width 
= 5 # give samename's variable value
r.height = 5 
puts r.area() 
#outputs is 25  

r.width2 
= 6 # not samename's variable  create
r.height2 = 6 
puts r.area2() 
# outputs is 36

上面的代碼說明了,在使用attr_accessor的時候,會尋找是否有同名的成員變量,如果有則訪問同名成員變量,如果沒有會默認創(chuàng)建一個前導@的成員變量

 (三)神奇的操作符重載
Ruby支持操作符重載,而且很神奇!


class Rectangle
  attr_accessor :width
  attr_accessor :height
  
  
def initialize(wdth, hgt)
    @width 
= wdth
    @height 
= hgt
  end
  
  
def area()
    
return @width * @height
  end
  
  
def +(addRectangle)
    
return self.area + addRectangle.area
  end

end

r1 
= Rectangle.new(2,2)
r2 
= Rectangle.new(3,3)
puts r1
+r2 # operator override
puts r1+(r2)
puts r1.
+(r2) # standard function calling format

神奇吧,其實把+號理解為一個函數的名字最好不過了,就像最后一個寫法,哈哈。

(四)參數的傳遞
參數的傳遞中有默認值與可變長參數兩個比較有特點的地方,其他語言有的,ruby也有。

1.參數的默認值
默認值的設置很簡單,與其他語言一樣,sample

class Rectangle
  attr_accessor :width
  attr_accessor :height
  
  
def initialize(wdth = 2, hgt = 2)
    @width 
= wdth
    @height 
= hgt
  end
  
  
def area()
    
return @width * @height
  end

end

r1 
= Rectangle.new
puts r1.area

看到了吧,使用默認值了


2.可選參數,可變長參數 sample

class ParamSample
  
def sayHello(*names)
      puts names.
class
      puts 
"Hello #{names.join(",")}!"
  end
  
end

ps 
= ParamSample.new
ps.sayHello 
#output Array Hello !
ps.sayHello("lee","snake"#output Array Hello lee,snake!

可以看出,可變長參數前綴*號,可變長參數的實質是一個Array,呵呵。

 

 

 

(一)類變量以及類方法
sample code

class BankAccount
  @@interestRate 
= 6.5
  
def BankAccount.getInterestRate()
    @@interestRate
  end
  attr_accessor :balance
  
def initialize(bal)
    @balance 
= bal
  end
end

puts BankAccount.getInterestRate()

以上代碼中描述了如何定義類變量以及如何訪問類變量

 

 

 

Ruby的成員訪問修飾關鍵字分為三種,與c#一樣。
1 private 只能為該對象所調用的方法
2 protected 只能為該對象及其子對象所調用的方法
3 public 可以讓任何對象所調用的方法

與c#不同的是,ruby的訪問修飾符從定義處開始起作用,直到下一個訪問修飾符出現(xiàn)時終止,比如

class Greeter
  
def initialize
  end
    
  private
  
def sayhi()
    puts 
"hi"
  end
  
  
def saybye()
    puts 
"bye"
  end
  
  public
  
def say()
    sayhi
    saybye
  end
  
end

= Greeter.new
g.say 
# output hi bye
g.sayhi # error because the sayhi isn't publics member

initialize默認就是private的 其他方法默認是public的 成員變量和類變量默認是private的 要用attr_reader或attr_accessor來增加讀寫控制

 

 

 

ruby除了支持class外還支持module,module的作用有兩個:
1 當作一組方法和常數的命名空間 防止命名沖突
2 可以被類mixin(混入),mixin module的類的實例則擁有了模塊的方法。


不同的類混入了同樣的模塊,則可以擁有同樣的功能,而無須去繼承某個父類。

可以通過include一個module來實現(xiàn)c++中的多繼承。

module CircularModule
  PI 
= 3.1415926
  
def calculate(diamiter)
    
return diamiter * PI
  end
end
  
class Circular
  include CircularModule
end
  
= Circular.new
puts c.calculate(
5# output 15.707963
可以看出來,使用include包含了一個模塊后,該類就會包含模塊中的方法和常數,方法用 對象名.方法名 ,常數用 類名::常數 。

md5

require 'md5'
puts MD5.hexdigest(
'')

sha1

require 'digest/sha1'
puts Digest::SHA1.hexdigest(
''

base64

require 'base64'
code 
= Base64.encode64('hallo')
source 
= Base64.decode64(code)

uri

src = 'abc編碼asdf'
code 
= URI.encode src
src 
= URI.decode code
puts code
puts src


GBK和UTF-8的轉換

用GBK而不要用GB2312,因為GBK不僅包含簡體中文,還包括繁體中文等,是一個大字符集。

# utf8 to gbk
def u2g(ucode)
  begin
    
"#{Iconv.conv('gbk','utf-8',ucode)}"
  rescue
     
" #{ucode} " #如果轉換不成功 則不轉換 并在字串兩邊加入空格 避免構造出錯誤的sql字符串
  end
end
這是一個比較不錯的從utf-8轉換為gbk編碼的方法 在網絡上抓取的信息 可使用這個方法轉換


RUBY DBI
ruby和sqlserver交互的時候 使用dbi是一個不錯的選擇
dbi有兩個比較重要的方法,一個是execute方法,會返回一個結果集,一個是do方法,do方法不會返回結果集,也不會返回受影響的行數,do方法是提交一個事務,而commit方法可以將之前所有使用do方法提交的事務執(zhí)行,commit會返回受影響的行數。

需要注意的是,如果使用do方法插入一條數據,而沒有commit直接disconnect了,將會導致這條數據插入數據庫又被刪除,因為你這個時候再插入一條新的數據發(fā)現(xiàn),自增長的主鍵,被空出一個位置來,比如從3一下跳到了5,所以不要忘記commit。

Net::HTTP
Net::HTTP::new方法可以支持4個參數的重載,比如
req = Net::HTTP.new 'xxxxxx.com',80,'proxy.com',8080
第三個和第四個參數是指定代理服務器
第二個參數指定端口 不寫的話默認80


File類的某些方法需要包括'win32/file'
有些方法不能使用,是因為沒有包含win32/file庫
require 'win32/file'
File.archive? 
'c:/boot.ini'


請求URI的時候 使用URI::encode轉換一下
從uri讀到的數據寫入本地的時候 使用binmode模式
require 'open-uri'
uri 
= 'http://xxx.com/中文.rar'
data 
= open(URI::encode(uri)){|f| f.read}
file 
= File.new uri[uri.rindex('/'+ 1..uri.length-1], 'w+'
file.binmode
file 
<< data
file.flush
file.close


執(zhí)行sql語句的時候 務必替換特殊字符
name = "lee's book"
sql 
= "update tb_files set [name] = #{name.gsub("'","''")}"

RUBY腳本后綴名改為.rbw即可在執(zhí)行時不顯示控制臺
arr = "1,2,3".split(',')
arr.map!{
|item| item = item.to_i} #一般可以用map!方法來改變原數組內容
0.upto(arr.length-1){|idx|arr[idx] = arr[idx].to_s} #再將數組內容改回字符串形式 使用upto方法


fixnum對象的upto和downto方法,可以很方便的作為訪問一個數組的索引。

其實也可以這樣做
(0..arr.length-1).each{|n| arr[n] = arr[n].to_i}


總之ruby是想怎么寫就怎么寫 非常方便

我們經常能看到ruby函數的參數前面有帶*號,
 def my_open(*args)
 end
這是什么意思呢?
其實也很簡單,它的意思是接收任意個參數,并把這些參數組裝成一個
名稱為args數組。

 def my_open(*args)
  puts(args.length)
 end
 
 my_open("test.rb","w") 
    
    我們可以看到輸出的結果是2,這說明了args是一個帶有兩個元素的

 

 

 

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ruby系列教材(26):More about methods(1)
ruby的元編程
用Ruby 創(chuàng)建領域特定語言(DSL)--從比特到系統(tǒng)
Ruby之symbol研究
Ruby off the Rails
跨越邊界: 活動記錄和 Java 編程中特定于域的語言
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服