# Ruby 的參數

> 

Published: 2015-03-22
URL: https://kaochenlong.com/parameters

---

大家在寫 Rails 專案的時候，一定都有用過 `link_to` 這個 view helper。問大家一個簡單的問題：

```ruby
link_to &#39;刪除&#39;, user, method: :delete, data: { confirm: &#39;sure?&#39; }, class:&#39;btn&#39;
```

請問，上面這段範例中，`link_to` 方法共有幾個參數?

如果你的答案是 5 個，那你就需要繼續往下看了 :)

&lt;!--more--&gt;

在[這篇文章](/2015/03/21/attr_accessor/)中提到，Ruby 很愛省略東西，像是方法的小括號，所以原來上面的 `link_to` 語法：

```ruby
link_to &#39;刪除&#39;, user, method: :delete, data: { confirm: &#39;sure?&#39; }, class:&#39;btn&#39;
```

原本應該長這樣：

```ruby
link_to(&#39;刪除&#39;, user, method: :delete, data: { confirm: &#39;sure?&#39; }, class:&#39;btn&#39;)
```

## 最後一個參數如果是 Hash，大括號可省略

在 Ruby 省略小括號大家都知道，不過逗點分開的參數不是 5 個嗎?

事實上，在 Ruby 中如果最後一個參數是 Hash 的話，它的大括號是可以省略的。舉個例子來說：

```ruby
def say_hello_to(name, options = {})
  # do something
end
```

如果要使用這個方法，可以這樣寫：

```ruby
say_hello_to &quot;eddie&quot;, {age: 18, favorite: &#39;ruby&#39;}
```

又，因為最後一個參數是 Hash，所以 Hash 的大括號也可省略：

```ruby
say_hello_to &quot;eddie&quot;, age: 18, favorite: &#39;ruby&#39;
```

如果你了解有什麼東西被省略的話，一開始的那段 link_to 的範例：

```ruby
link_to &#39;刪除&#39;, user, method: :delete, data: { confirm: &#39;sure?&#39; }, class:&#39;btn&#39;
```

還原之後會變成：

```ruby
link_to(&#39;刪除&#39;, user, {method: :delete, data: { confirm: &#39;sure?&#39; }, class:&#39;btn&#39;})
```

所以，其實參數個數只有 3 個，最後一個參數是一個 Hash。

## 小結

Ruby 的語法可以適時的省略小括號、大括號或 return，程式碼寫起來的確會更像文章，對新手來說可能會容易混淆，不過看久了應該也會慢慢習慣了。

以上，希望對大家有幫助 :)


