多重代入

水曜日にtoRubyに参加。
多重代入の話題になった。
ふと思い出したのだが、例えばHashのキーだけを取り出したい時に、(ここではHashの代わりにENV使う。)

anna% irb
irb(main):001:0> ENV.collect {|v, *_| v}
=> ["MANPATH", "TERM_PROGRAM", "TERM", "SHELL", "TMPDIR", "Apple_PubSub_Socket_Render", "TERM_PROGRAM_VERSION", "USER", "COMMAND_MODE", "SSH_AUTH_SOCK", "__CF_USER_TEXT_ENCODING", "PATH", "PWD", "LANG", "SHLVL", "HOME", "LOGNAME", "DISPLAY", "SECURITYSESSIONID", "_", "OLDPWD", "LINES", "COLUMNS"]

とか書くのをどっかで見た事がある。
ブロック引数の|v, *_|の箇所は多重代入を使って最初の値だけとってくるということでいいのかな?
"*_"ってのは2番目以降は無視しますよって言う意思表示?
そういえば、"*_"が文法上意味があるんじゃないかと思って調べた事も昔あったなあ。

多重代入なので、下記の様にしても結果は一緒ってことで。

irb(main):002:0> ENV.collect {|v,| v}
=> ["MANPATH", "TERM_PROGRAM", "TERM", "SHELL", "TMPDIR", "Apple_PubSub_Socket_Render", "TERM_PROGRAM_VERSION", "USER", "COMMAND_MODE", "SSH_AUTH_SOCK", "__CF_USER_TEXT_ENCODING", "PATH", "PWD", "LANG", "SHLVL", "HOME", "LOGNAME", "DISPLAY", "SECURITYSESSIONID", "_", "OLDPWD", "LINES", "COLUMNS"]