Blog 已遷移 http://steventtud.com,logdown 版本不再更新,麻煩大家前往新網站觀看^^

Ruby bits ( 2 ) : Methods and Classes

Hash Argument


每一個不同的欄位就多一個 argument不是個好方法,會造成很多欄位空在那邊。

用 Hash argument 來解決這個問題。

使用方法,因為 hash 是由 key-value 所組成,所以可以把需要的屬性設成 symbol ,也就是:lat這種樣子。後面指定它的 value,形成 key-value 的形式。

改寫成 1.9 以後的 hash

hash 中的 key 可以省略,只寫出某幾個就可以,就連hash argument 本身都可以省略,。

Exceptions


當 tweets 是空的時候,我希望我會知道這個訊息,這時候 Exception 就派上用場了。

def get_tweets(list)
  unless list.authorized?(@user)
    raise AuthorizationException.new
    end
    list.tweets
end

現在我有一個 method 叫做 get_tweets(list),當他發現 user 沒有認證的時候,它就會丟出AuthorizationException這個例外,對應的程式碼是raise AuthorizationException.new,接下來再用另外一段程式碼,把剛剛上面的程式碼包起來,因為我們接下來要做的是對拋出的例外做一些處理,好讓我們可以藉由 exception 更輕鬆的了解到錯誤出現在哪裡。

begin
  tweets = get_tweets(my_list)
rescue AuthorizationException
  warn "You are not authorized to access this list."
end

1~2行,先執行我們剛剛建立的method 叫做 get_tweet(my_list),接著 3~4 行的意思是當發現有認證例外(AuthorizationException)產生時,就會跳出警告"You are not authorized to access this list."
延伸閱讀:
Ruby Exceptions
tutorial point ruby exception
ruby exceptions and error handling

Splat Argument


前面有加 * 字號的變數代表傳入的會是 Array,依序傳入為 Array[0]、Array[1]、Array[2]...以此類推。

You Need a Class When ...



OverSharing


Reopen Classes

  • You can re-open and change any class.
  • Beware! You don't know who relies on the old functionality.
  • You should only re-open classes that you yourself own.

Self