高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

Ruby 語法放大鏡之「Ruby 的參數」

Ruby 語法放大鏡」系列短文主要是針對在大家學習 Ruby 或 Rails 時看到一些神奇但不知道用途的語法介紹,希望可以藉由這一系列的短文幫大家更容易的了解到底 Ruby 或 Rails 是怎麼回事。

大家在寫 Rails 專案的時候,一定都有用過 link_to 這個 view helper。問大家一個簡單的問題:

1
link_to '刪除', user, method: :delete, data: { confirm: 'sure?' }, class:'btn'

請問,上面這段範例中,link_to 方法共有幾個參數?

如果你的答案是 5 個,那你就需要繼續往下看了 :)

這篇文章中提到,Ruby 很愛省略東西,像是方法的小括號,所以原來上面的 link_to 語法:

1
link_to '刪除', user, method: :delete, data: { confirm: 'sure?' }, class:'btn'

原本應該長這樣:

1
link_to('刪除', user, method: :delete, data: { confirm: 'sure?' }, class:'btn')

最後一個參數如果是 Hash,大括號可省略

在 Ruby 省略小括號大家都知道,不過逗點分開的參數不是 5 個嗎?

事實上,在 Ruby 中如果最後一個參數是 Hash 的話,它的大括號是可以省略的。舉個例子來說:

1
2
3
def say_hello_to(name, options = {})
  # do something
end

如果要使用這個方法,可以這樣寫:

1
say_hello_to "eddie", {age: 18, favorite: 'ruby'}

又,因為最後一個參數是 Hash,所以 Hash 的大括號也可省略:

1
say_hello_to "eddie", age: 18, favorite: 'ruby'

如果你了解有什麼東西被省略的話,一開始的那段 link_to 的範例:

1
link_to '刪除', user, method: :delete, data: { confirm: 'sure?' }, class:'btn'

還原之後會變成:

1
link_to('刪除', user, {method: :delete, data: { confirm: 'sure?' }, class:'btn'})

所以,其實參數個數只有 3 個,最後一個參數是一個 Hash。

小結

Ruby 的語法可以適時的省略小括號、大括號或 return,程式碼寫起來的確會更像文章,對新手來說可能會容易混淆,不過看久了應該也會慢慢習慣了。

以上,希望對大家有幫助 :)

Comments