• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ブロック1 Ruby認定試験対策問題)

Ruby認定試験対策問題のブロックに関する質問と回答

このQ&Aのポイント
  • Ruby認定試験の問題で、ブロックに関する質問があります。具体的には、testメソッドに渡されたブロックのselfがどれかを尋ねています。
  • 解答は「トップレベル」となっており、ブロックは呼び出し先のselfを継承することが説明されています。
  • 質問者の疑問点として、「testメソッドに渡されたブロック」とは(1..3)のことを指すのか、呼び出し先のselfとはfoo.test{|i| i }のことなのかといった内容があります。また、別のサイトでトップレベルのselfがObjectクラスのメソッドを実行していることが説明されていたが、それが問題のどこと関連しているかといった点も疑問として挙げられています。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

どこそこのサイトにこうありました。という場合は、可能ならそのURLも書いておいてください。 irb(main):001:0> self => main irb(main):002:0> class Foo irb(main):003:1> def test irb(main):004:2> (1..3).each{|i| yield(i)} irb(main):005:2> end irb(main):006:1> end => nil irb(main):007:0> foo = Foo.new => #<Foo:0x2b67a18> irb(main):008:0> foo.test{|i| i } => 1..3 irb(main):009:0> foo.test{|i| p self } main main main => 1..3 irb(main):011:0> class Foo irb(main):012:1> def test2 irb(main):013:2> p self irb(main):014:2> end irb(main):015:1> end => nil irb(main):016:0> foo2 = Foo.new => #<Foo:0x2b44644> irb(main):017:0> foo.test2 #<Foo:0x2b67a18> => nil irb(main):018:0> ということで >・testメソッドに渡されたブロックとは、(1..3)のことを指すのでしょうか。 違います。質問にあった例でいうと foo.test{|i| i } の、{|i| i} の部分のことです。 >・メソッドの呼出し先とは、foo.test{|i| i }のことを意味しているのでしょうか。 そうですね。 でもそれは「呼び出し元」のような気がするのですが。 >・呼出し先のselfとは、fooかFooのことでしょうか? ちがいます。 上述した例にあるように irb(main):001:0> self => main main (== トップレベル)です。 >・「selfはメソッド内で実行されるとそのメソッドを実行しているオブジェクトを参照することが出来ます」 と別のサイトに記載されていたのですが、「トップレベルのselfとはObjectクラスのメソッドを実行している」、という意味になるのでしょうか。 irb(main):020:0> self.class => Object ということでそうなりますか。

re999
質問者

お礼

疑問に全てご回答いただき、本当にありがとうございました。 irb+解説だったので、大変解りやすかったです。 >どこそこのサイトにこうありました。という場合は、可能ならそのURLも書いておいてください。 次回から気をつけます!

関連するQ&A