3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby: Splat Operator と Double Splat Operator

Last updated at Posted at 2022-01-26

はじめに

Ruby には Splat OperatorDouble Splat Operator の2つの文法があることを知りました。以前より何回か見たことはあったが、ちゃんと理解できていなあった点もあるので、改めてその違いと特徴をまとめてみます。

前提

  • Ruby 2.7.5

Splat Operator

どんなもの?

メソッドの仮引数にある * を使用して定義した引数のことです。

def method(*args)
...
end

要は可変長引数で配列として受けることができます。

def method(*args)
  args
end

p method('Ruby', name: 'yamada') # => ["Ruby", {:name=>"yamada"}]

配列として受けることができるので、引数には文字列やキーワード引数などが渡すことができます。

Double Splat Operator

どんなもの?

メソッドの仮引数にある ** を使用して定義した引数のことです。

def method(**args)
...
end

可変長キーワード引数を受け取ることができます。

def method(**args)
  args
end

p method(language: 'Ruby', name: 'yamada') # => {:language=>"Ruby", :name=>"yamada"}

渡し方がキーワード引数となるので、Splat Operatorの時のように ArgumentError が発生してしまいます。

p method('Ruby', name: 'yamada') #=> method': wrong number of arguments (given 1, expected 0) (ArgumentError)`

まとめ

名前も似ているし、可変長という点では挙動も似ているのですが、引数の渡し方は異なるので実装時は注意が必要でした。改めて理解ができた点はよかったです。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?