我們經常能看到ruby函數的參數前面有帶*號,
def my_open(*args)
end
這是什么意思呢?
其實也很簡單,它的意思是接收任意個參數,并把這些參數組裝成一個
名稱為args數組。
def my_open(*args)
puts(args.length)
end
my_open("test.rb","w")
我們可以看到輸出的結果是2,這說明了args是一個帶有兩個元素的
|
(一)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
繼續(xù)補充下attr_accessor的使用,sample
上面的代碼說明了,在使用attr_accessor的時候,會尋找是否有同名的成員變量,如果有則訪問同名成員變量,如果沒有會默認創(chuàng)建一個前導@的成員變量
(三)神奇的操作符重載
Ruby支持操作符重載,而且很神奇!
神奇吧,其實把+號理解為一個函數的名字最好不過了,就像最后一個寫法,哈哈。
(四)參數的傳遞
參數的傳遞中有默認值與可變長參數兩個比較有特點的地方,其他語言有的,ruby也有。
1.參數的默認值
默認值的設置很簡單,與其他語言一樣,sample
看到了吧,使用默認值了
2.可選參數,可變長參數 sample
可以看出,可變長參數前綴*號,可變長參數的實質是一個Array,呵呵。
(一)類變量以及類方法
sample codeclass BankAccount
@@interestRate = 6.5
def BankAccount.getInterestRate()
@@interestRate
end
attr_accessor :balance
def initialize(bal)
@balance = bal
end
end
puts BankAccount.getInterestRate()
以上代碼中描述了如何定義類變量以及如何訪問類變量
Ruby的成員訪問修飾關鍵字分為三種,與c#一樣。 與c#不同的是,ruby的訪問修飾符從定義處開始起作用,直到下一個訪問修飾符出現(xiàn)時終止,比如 initialize默認就是private的 其他方法默認是public的 成員變量和類變量默認是private的 要用attr_reader或attr_accessor來增加讀寫控制
ruby除了支持class外還支持module,module的作用有兩個: md5 sha1 base64 uri
1 private 只能為該對象所調用的方法
2 protected 只能為該對象及其子對象所調用的方法
3 public 可以讓任何對象所調用的方法class Greeter
def initialize
end
private
def sayhi()
puts "hi"
end
def saybye()
puts "bye"
end
public
def say()
sayhi
saybye
end
end
g = Greeter.new
g.say # output hi bye
g.sayhi # error because the sayhi isn't publics member
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
c = Circular.new
puts c.calculate(5) # output 15.707963
require 'md5'
puts MD5.hexdigest('')
puts Digest::SHA1.hexdigest('')
require 'base64'
code = Base64.encode64('hallo')
source = Base64.decode64(code)
src = 'abc編碼asdf'
code = URI.encode src
src = URI.decode code
puts code
puts src
GBK和UTF-8的轉換
用GBK而不要用GB2312,因為GBK不僅包含簡體中文,還包括繁體中文等,是一個大字符集。
我們經常能看到ruby函數的參數前面有帶*號,
def my_open(*args)
end
這是什么意思呢?
其實也很簡單,它的意思是接收任意個參數,并把這些參數組裝成一個
名稱為args數組。
def my_open(*args)
puts(args.length)
end
my_open("test.rb","w")
我們可以看到輸出的結果是2,這說明了args是一個帶有兩個元素的
|