blog.waterlow.work

Ruby, Rails, js, etc...

【Ruby】Goldリベンジ今度こそ2

可変長引数のプリント

またひとつ間違いがありました。可変長引数のメソッド内部での受け取り方について。

def foo(*aaa)
  p *aaa #=>[1, 2, 3]
end
foo [1, 2, 3] #=>[1, 2, 3]

可変長引数の場合、引数の受け皿としてブランクな配列があるイメージでしょうか。たとえば上の例だと引数として配列を指定しています。てっきり配列がそのままfooに渡されると思っていました。しかしそうではなく配列を受け皿の配列に入れたもの、すなわち[[1, 2, 3]]メソッドに渡されます。
出力結果が[1, 2, 3]にするにはpに何を渡せばいいかとの出題だったので、配列aaaの展開*aaaをわたせばOK。aaaそのものを渡すと[[1, 2, 3]]が出力されてしまいます。

enum_for

enum_forはEnumelatorオブジェクトを生成しますが、ブロックを渡しても特になにもしてくれません。エラーにはなりませんが。

これで間違った問題を10問ほど思い出せました。