Rubricks Project このページをアンテナに追加 RSSフィード

Rails製CMS Rubricksの開発についてつらつらと書き連ねるブログです

2007-07-27 Rubyの多重代入と可変長引数

Rubyの多重代入と可変長引数

Rubyの多重代入・可変長引数はとても便利だが、トリッキーに使ってしまうとコードが追いにくくなる。リファレンスマニュアルには下記のように例が示されている。

 foo, bar = [1, 2]       # foo = 1; bar = 2
 foo, bar = 1, 2         # foo = 1; bar = 2
 foo, bar = 1            # foo = 1; bar = nil

 foo, bar, baz = 1, 2    # foo = 1; bar = 2; baz = nil
 foo, bar = 1, 2, 3      # foo = 1; bar = 2
 foo      = 1, 2, 3      # foo = [1, 2, 3]
 *foo     = 1, 2, 3      # foo = [1, 2, 3]
 foo,*bar = 1, 2, 3      # foo = 1; bar = [2, 3]

基本的には問題ないと思うが、「foo = 1, 2, 3」を配列と解釈するのはどうなのかと思ってしまう。明示的に「*」を付けない限りは一つ目の値を入れてくれた方が(個人的に)しっくりくる。

例えば下記のようなコードを書く。はい、ただのTypoですすみません。

a = 1,
b = 2

その変数の中身を出力する。

p a
  => [1, 2]
p b
  => 2

そりゃないよ、という解釈をされている。

トラックバック - http://d.hatena.ne.jp/rubricks/20070727/1185528707