重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

以下のURLの質問で、
https://oshiete.goo.ne.jp/qa/14031406.html
で、p1やp2に格納されているものは、Foo.newの引数でしょうか?それと、インスタンスの初期化を行っているのは、年齢と名前ですよね?教えて頂けると幸いです。

質問者からの補足コメント

  • うーん・・・

    とすると、p1やp2のFoo.newの2つの引数のことではないと言うことでしょうか?教えていただけると幸いです。"yamada",18や、"satou",20の事です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2025/02/16 14:30
  • つまり、p1とp2に格納されるのは、
    class Foo
    def initialize(name,age)
    @name = name #名前
    @age = age #年齢
    end
    def say()
    puts("My name is " + @name)
    puts("I am " + @age.to_s + "years old")
    end
    end
    と、"yamada",18や、"satou",20が格納されているという解釈で合っていますでしょうか?
    後、インスタンスの初期化は、No.12のプログラム中のどこで、行っているのでしょうか?教えて頂けると幸いです。

    No.2の回答に寄せられた補足コメントです。 補足日時:2025/02/16 16:42
  • うーん・・・

    つまり、インスタンスの初期化は、newメソッドで行っている事しか分からないという事でしょうか?教えて頂けると幸いです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2025/02/19 12:37
  • No.3のプログラムの実行結果を教えて頂けると幸いです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2025/02/19 12:43
  • No.3のプログラムの実行結果を教えて頂けると幸いです。

    No.5の回答に寄せられた補足コメントです。 補足日時:2025/02/19 13:06
  • つまり、p1とp2に格納されるのは、
    class Foo
    def initialize(name,age)
    @name = name #名前
    @age = age #年齢
    end
    def say()
    puts("My name is " + @name)
    puts("I am " + @age.to_s + "years old")
    end
    end
    は、確実にp1とp2に格納されているのですよね?
    後、p1とp2にclass Fooの実体が格納されると書かれていますが、そのclass Fooの実体が、class Fooからendまでだからでしょうか?なぜ、それ以外のメソッドも含まれるのでしょうか?迅速な回答と、返信遅くなりすみませんでした。

    No.6の回答に寄せられた補足コメントです。 補足日時:2025/02/19 20:59
  • 迅速な回答ありがとうございます。話をまとめると、p1とp2に格納されているのは、class Foo〜endまでと、状況によって、Foo.newの引数が格納されている(Foo.newの引数が全て格納されない場合もある)と言う事でしょうか?教えて頂けると幸いです。

    No.8の回答に寄せられた補足コメントです。 補足日時:2025/02/20 02:52

A 回答 (9件)

>話をまとめると、p1とp2に格納されているのは、class Foo〜endまでと、状況によって、Foo.newの引数が格納されている(Foo.newの引数が全て格納されない場合もある)と言う事でしょうか?



回答:はい、そうです。
    • good
    • 0

>追記


>なぜ、クラス内のメソッドも含まれるのでしょうか?これについても教えて頂けると幸いです。

なぜ、クラス内のメソッドもp1、p2に含まれるのかと理解しました。

クラス内のメソッドとは、
def initialize(name,age)
省略
end
def say()
省略
end

のことでしょうか。
上記は
calss Foo
end
内に含まれているので、
p1,p2にはクラスFoo全体の実体が格納されるので、
initializeとsayが含まれるのは自明かと思いますが、
そのような意味の質問ではないのでしょうか。
この回答への補足あり
    • good
    • 0

>つまり、p1とp2に格納されるのは、


>class Foo
>def initialize(name,age)
>@name = name #名前
>@age = age #年齢
>end
>def say()
>puts("My name is " + @name)
>puts("I am " + @age.to_s + "years old")
>end
>end
>は、確実にp1とp2に格納されているのですよね?

回答:はい、含まれています。


>後、p1とp2にclass Fooの実体が格納されると書かれていますが、
>そのclass Fooの実体が、class Fooからendまでだからでしょうか?

回答:はい、そうです。


>なぜ、それ以外のメソッドも含まれるのでしょうか?

回答:それ以外のメソッドとは、具体的にどのメソッドのことでしょうか。
質問の意味がよくわかりませんでした。
    • good
    • 0

>No.3のプログラムの実行結果を教えて頂けると幸いです。



失礼ですが、あなたのパソコンにrubyはインストールされてないのでしょうか。
もし、そうでしたら、まず、rubyをインストールすることをお勧めします。
rubyを勉強する場合、まずrubyをインストールして、rubyを実行できる環境を作ることが第一番に行うべきことです。
そして、自分でいろいろと試してみることが、上達の近道になります。

ちなみに
---------------------------------
class Foo
def initialize(name,age)
@name = name #名前
@age = 999 #ageを使用していないことに注意
end
def say()
puts("My name is " + @name)
puts("I am " + @age.to_s + "years old")
end
end
p1 = Foo.new("yamada",18)
p2 = Foo.new("satou",20)
p1.say()
p2.say()
---------------------------------
の実行結果は、
My name is yamada
I am 999years old
My name is satou
I am 999years old
になります。
この回答への補足あり
    • good
    • 0
この回答へのお礼

追記
なぜ、クラス内のメソッドも含まれるのでしょうか?これについても教えて頂けると幸いです。

お礼日時:2025/02/19 21:14

>つまり、インスタンスの初期化は、newメソッドで行っている事しか分からないという事でしょうか?教えて頂けると幸いです。



はい。その通りです。
この回答への補足あり
    • good
    • 0

>インスタンスの初期化は、No.12のプログラム中のどこで、行っているのでしょうか?



インスタンスの初期化は、
p1=Foo.new("yamada",18)
を行ったとき、newメソッドで行われます。
しかしながら、そのnewメソッドで行われている具体的な内容を私たちruby
の利用者は知ることができません。
利用者がわかっているのは、「newメソッドでインスタンスの生成及び初期化が行われ、initializeメソッドが定義されていれば、それが実行される」
ということだけです。
従って、initializeメソッドの内容だけは知ることができます。
以下の個所が実行されるということになります。
def initialize(name,age)
@name = name #名前
@age = age #年齢
end
この回答への補足あり
    • good
    • 0

>つまり、p1とp2に格納されるのは、


>・・・省略・・・
>と、"yamada",18や、"satou",20が格納されているという解釈で合っていますでしょうか?

はい、そうです。
あなたの「"yamada",18や、"satou",20が格納されている」という意味は、
「今回のケースだけでなく、ほかのケースでも無条件にnewに引数で渡した値が、常に、インスタンスに格納されるか」ということであれば、回答はNOになります。今回のケースでは、格納されますが、以下のようなケースでは格納されません。

class Foo
def initialize(name,age)
@name = name #名前
@age = 999 #ageを使用していないことに注意
end
def say()
puts("My name is " + @name)
puts("I am " + @age.to_s + "years old")
end
end
p1 = Foo.new("yamada",18)

の場合、
Foo.new("yamada",18)の18は、p1には格納されません。
"yamada"だけが格納されます。
この回答への補足あり
    • good
    • 0

>とすると、p1やp2のFoo.newの2つの引数のことではないと言うことでしょうか?



p1,p2に格納されるのは、Foo.newの2つの引数の内容ですが、
それ以外のもの(クラス内のメソッド)も含まれます。
Foo.newの2つの引数の内容だけが格納されているわけではありません。
この回答への補足あり
    • good
    • 0

>p1やp2に格納されているものは、Foo.newの引数でしょうか?



質問は
https://oshiete.goo.ne.jp/qa/14031406.html
No12のスクリプトについてと解釈すると、
p1やp2に格納されているものは、class Fooの実体です。
イメージとしては、p1,p2に

class Foo
def initialize(name,age)
@name = name #名前
@age = age #年齢
end
def say()
puts("My name is " + @name)
puts("I am " + @age.to_s + "years old")
end
end

の個所が格納されると考えてください。
但し、@nameと@ageの内容はp1とp2とで異なります。

>インスタンスの初期化を行っているのは、年齢と名前ですよね?
はい。@nameと@ageを初期化(値を設定)しています。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A