Rubyの引数について色々あるけど知らなかったので調べてみた。
###普通の引数
class Hoge
def self.piyo(msg)
p msg
end
end
Hoge.piyo('fuga') #=> 'fuga'
###デフォルト引数
引数にデフォルト値をもたせられる。
実行時に引数を渡さなかった場合、デフォルト引数を用いて処理が行われる。
def self.piyo(msg='fuga')
p msg
end
Hoge.piyo #=> 'huga'
Hoge.piyo('fugafuga') #=> 'fugafuga'
###キーワード引数
hashを使った引数宣言もできる。
実行時にkeyを宣言しないとエラるので注意。
def self.piyo(msg: 'fuga')
p msg
end
Hoge.piyo # =>'fuga'
Hoge.piyo(msg: 'fugafuga') #=> 'fugafuga'
キーワード引数は複数の引数を使う時に便利。
Hashなので引数の順番を気にせず使える。
def self.piyo(msg: 'hello', name: 'Yamada')
p "#{msg}, #{name}"
end
Hoge.piyo #=>"hello, Yamada"
Hoge.piyo(msg: 'Hi', name: 'Sato') #=> "Hi, Sato"
Hoge.piyo( name: 'Sato', msg: 'Hi') #=> "Hi, Sato"
ただし、定義していないkeyを使おうとするとエラる。
Hoge.piyo(gender: 'male')
# => ArgumentError: unknown keyword: gender from (pry):23:in `<main>'
###可変長引数&オプション引数
*をつければ引数を複数個設定できる。
これを可変長引数という。
引数は配列として受け取られる。
def self.piyo(*msg)
p msg
end
Hoge.piyo('fuga') # => ['huga']
Hoge.piyo('huga', 'hugahuga') #=> ['fuga', 'fugafuga']
*を2つつけるとオプション引数になる。
オプション引数はHashとして受け取られる。
def self.piyo(**msg)
p msg
end
Hoge.piyo(msg: 'fuga') # => {:msg => 'huga'}
Hoge.piyo(msg: 'huga', name: 'hugahuga')
#=> { :msg => 'fuga', :name => 'fugafuga' }
###ブロック引数
blockも引数として渡せる。
block.callでメソッド内で実行する。
def self.piyo(&block)
block.call
end
Hoge.piyo{ p 'fuga' } # => 'fuga'
yieldの方がよく使う気がする。
使い方&結果は一個上と同じ。
def self.piyo
yield
end