- ベストアンサー
Rubyのメソッドについて理解できないときの質問
- Ruby初心者な私が、Rubyのメソッドについてわからないことがあり質問します。
- 具体的には、Net::SMTP.startメソッドの意味や引数について理解できていません。
- また、startメソッド内の記述や変数についても疑問があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
初心者というか、入門されてないようなので、書籍かサイトで、Rubyの文法を学ばれた方が良いかと思います。Rubyの文法はルールが少なくて非常にシンプルです。 以下の説明は他の言語経験者のための説明でRuby的な厳密さは一部無視しています。 >1)NetクラスのインナークラスであるSMTPクラスのstartメソッドを呼び出している。 Rubyにはインナークラスという概念はありません。Netはモジュールで、他の言語で言うとパッケージに近いです(同じでは無いですが)。 >2)('smtp.example.com', 25)これはstartメソッドの引数である。 これはそう。 >3)|smtp|よくわからない。このstartメソッドの戻り値?startメソッドの中なのに? startメソッドの引数はもう一つあって、 {|smtp| から 最後の } までが無名メソッド(ブロック)で、この無名メソッドを引数に渡して、startから呼び返して(コールバック)もらいます。 Rubyのメソッド呼び出しは、「ブロック付きメソッド呼び出し」という構文があって、あたかも言語構文のような形で最大一つの無名メソッドを呼び出し先メソッドに渡すことが出来ます。 簡単な例では、 (1..10).each { |i| puts i } は、def foo(i); puts i; end というようなメソッドをeachにコールバック用として渡しています。 ということで|smtp|は、コールバックメソッドの引数です。 startメソッドはTCPコネクションを張って、そのコネクションを含んだSMTPクラスのオブジェクトを引数としてコールバックを呼び出します。 >4)From: Your Name <from@example.com> ここもよくわからない。なぜ急に変数にも代入しない 文字列を書いたのか? これは、sh(Unixのシェル) 由来のヒアドキュメントという構文です。<<-EndOfMail がヒアドキュメントの開始。 複数行の文字列リテラルを書くときによく使われます。 <<-EndOfMail の部分が、次の行から EndOfMailの行の前までの文字列リテラルと置き換わります。 つまり、下記と同じ。 smtp.send_message( "From: Your Name <from@example.com> To: Dest Address <to@example.net> Subject: test mail Date: Sat, 23 Jun 2001 16:26:43 +0900 Message-Id: <unique.message.id.string@yourhost.example.com> This is a test mail. ", 'from@example.com', 'to@example.net') ↑この書き方だと、第二引数以降がメソッド名から離れすぎてしまう。
お礼
お返事おそくなってすいません。 丁寧な回答ありがとうございます。たしかに入門サイトを勉強してらたいていのことはかいていました><。 また、ヒアドキュメントの部分は使い道がよくわかっていなかったので、とても参考になりました。ありがとうございます。