質問: page_source.scan(%r!^(.+?)!) url_titles.zip(dates).map{|(aurl, atitle),ymd|[aurl,atitle, Time.local(*ymd)]} ``` 変数datesとurl_titleは[ [ ],[ ],[ ]・・・ ]のような多重の配列になっています。 {|(aurl, atitle),ymd|[aurl,atitle, Time.local(*ymd)]}はどういう構造になっているのでしょうか? |の意味。ymdはどこから出てきたのか?(aurl, atitle),ymdの三つの引数?のうちなぜymdだけ( )がないのかmapの中にある[ ]はどういう意味なのか?ymdについている*の意味を教えていただきたいです。
回答: > > |の意味 > > > `map`はブロックを受け取って,リスト内の各要素にブロックを適用したリストを返します. ブロックの文法的に,`{|x| put x}`と書いた場合,引数として`x`を受け取って`put x`を実行するという意味になります. したがって,質問されている`|`は単に引数の開始位置および終了位置の区切り文字です. > > ymdはどこから出てきたのか?(aurl, atitle),ymdの三つの引数?のうちなぜymdだけ( )がないのか > > > ここでごちゃごちゃ書くより,おそらく以下の記事が参考になるはず. [Ruby]ブロック引数への代入方法 on Qiita > > mapの中にある[ ]はどういう意味なのか? > > > 冒頭で述べた通り,ブロックは内部に書かれた処理の評価結果を返します. この場合,引数を「URL,タイトル,日時」からなる3要素のリストにして返しなさいという意味です. > > ymdについている*の意味を教えていただきたいです > > > Rubyでよくある質問ですが,リストを展開し,リストの各要素をメソッドの各引数として渡す方法です. 名前があったはずだけど忘れましたが. 参考:配列の展開 on Qiita