ruby元編程(附錄)

擬態方法

擬態方法就是去掉括號調用方法的方式,會給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)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容