擬態方法
擬態方法就是去掉括號調用方法的方式,會給ruby開發者帶來很多語法糖,當然也會給開發者和ruby本身增加很多容易混淆的場景。
如下場景中ruby無法知道name是局部變量還是(給@name賦值)擬態方法,按處理優先級ruby會把它當做局部變量處理
class C
attr_accessor :name
def initialize
# 兩種可能
# 1、給局部變量name賦值(高優先級)
# 2、調用擬態方法name=(低優先級)
name = "lang"
end
end
puts C.new.name #=> nil
為了去除二義性,在調用擬態方法時應該加上self
,明確告訴ruby當做擬態方法處理
class C
attr_accessor :name
def initialize
self.name = "lang"
end
end
puts C.new.name #=> "lang"
空指針保護
a ||= [] #=> 如果a為nil則將a初始化為空數組,否則什么也不做
具名參數
當調用一個方法時,不得不按照固定的順序傳入參數,當參數很多時就會很容易出錯。在ruby中可以使用鍵值序列來當做參數傳入,這些參數會被包裝成一個hash傳入
缺點是要自己從hash中取出需要的參數,并且單從方法定義來看無法看到完整的參數列表
def my_method(args)
puts args[:a] #=> 1
end
my_method(:a => 1, :b => 2, :c => 3)
#在ruby 1.9以后也可以這樣寫
my_method(a:1, b:2, c:3)