質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1050閲覧

mapメソッドの構造

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/08/28 16:45

###該当のソースコード

dates = page_source.scan(%r!(\d+)年 ?(\d+)月 ?(\d+)日<br />!) url_titles = page_source.scan(%r!^<a href="(.+?)">(.+?)</a><br />!) 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についている
の意味を教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

|の意味

mapはブロックを受け取って,リスト内の各要素にブロックを適用したリストを返します.
ブロックの文法的に,{|x| put x}と書いた場合,引数としてxを受け取ってput xを実行するという意味になります.
したがって,質問されている|は単に引数の開始位置および終了位置の区切り文字です.

ymdはどこから出てきたのか?(aurl, atitle),ymdの三つの引数?のうちなぜymdだけ( )がないのか

ここでごちゃごちゃ書くより,おそらく以下の記事が参考になるはず.
[Ruby]ブロック引数への代入方法 on Qiita

mapの中にある[ ]はどういう意味なのか?

冒頭で述べた通り,ブロックは内部に書かれた処理の評価結果を返します.
この場合,引数を「URL,タイトル,日時」からなる3要素のリストにして返しなさいという意味です.

ymdについている*の意味を教えていただきたいです

Rubyでよくある質問ですが,リストを展開し,リストの各要素をメソッドの各引数として渡す方法です.
名前があったはずだけど忘れましたが.

参考:配列の展開 on Qiita

投稿2017/08/29 02:03

tamy

総合スコア442

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamy

2017/08/29 02:03

追伸ですが,前出の回答者さんのおっしゃっている通り,まず Ruby の基礎文法などを勉強した方がいいかと思います.
suzukis

2017/08/29 07:29

説明されているだけもう一つの中身のない回答より遙かにマシですが、基礎文法を勉強しろというのはナンセンスなアドバイスだと思います。入門書に書かれてない(引数定義の()なんかはリファレンスにすら書かれていない)テクニックですし、そういうのを使ったコードは個々の文法はわかってても理解できないことは良くあります。
退会済みユーザー

退会済みユーザー

2017/08/29 10:32

単純なmap{|x| put x}は知っていたのですが実行文が配列であったりブロック引数の()を使った渡し方は知らなかったので質問してしまいました。 知っているのなら| |の意味は質問しないはずなのですが式が長かったのと()や[ ]があり混乱してしまいました。 リンクもありがとうございます。理解できました。 基礎的な質問だったかもしれないのですが丁寧に答えていただきありがとうございます。助かりました。
guest

0

どれもRubyの基本文法ですね。
基本文法をマスターするまでは、分からないことを都度聞くのでなく、まずは基本文法を入門書などでマスターしてください。Rubyについてほとんど知らない人に、ゼロから説明するのは困難です。

投稿2017/08/28 22:09

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2017/08/29 13:15

基本文法の勉強がナンセンスというコメントが付いていますが、 基礎文法をすっ飛ばして、リファレンスにすら書かれていないことは理解できないので、まずは基本文法を勉強しましょうというのは、正しいアドバイスです。 質問中の | [ ] * は基本文法です。
otn

2017/08/29 14:00

失礼。リファレンスにも書いてありました。 ただ、これを見つけて理解するのは、入門を終えてない人には難しいかも。 そういった意味でも、入門を終えましょう。 https://docs.ruby-lang.org/ja/2.4.0/doc/spec=2fcall.html > ブロックパラメータの代入は演算子式/多重代入と同じルールで行われます。 https://docs.ruby-lang.org/ja/2.4.0/doc/spec=2foperator.html > 多重代入は括弧により、ネストした配列の要素を代入することもできます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問