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

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

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

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

Q&A

解決済

2回答

900閲覧

Rubyのプライベートメソッドについて

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2021/06/19 15:15

Rubyの自作したクラスからプライベートメソッドを呼び出すコードを書いたのですが、

Ruby

1class KindOfClasses 2 #インスタンスメソッドを定義 3 def call_public_method 4 p 'publicメソッドが呼ばれました' 5 call_private_method 6 end 7 8 #クラスメソッドを定義 9 def self.call_class_method 10 p 'クラスメソッドが呼ばれました' 11 end 12 13 #プライベートメソッドを定義 14 private 15 def call_private_method 16 p 'privateメソッドが呼ばれました' 17 end 18end 19 20#インスタンスメッソドを呼び出す 21instance = KindOfClasses.new 22instance.call_public_method 23#クラスメソッドを呼び出す 24KindOfClasses.call_class_method 25

↑ call_public_method内でプライベートメソッドを呼び出したコードでは、ちゃんとプライベートメソッドで指定した文章が表示されるのですが、

Ruby

1class KindOfClasses 2 #インスタンスメソッドを定義 3 def call_public_method 4 p 'publicメソッドが呼ばれました' 5 end 6 7 #クラスメソッドを定義 8 def self.call_class_method 9 p 'クラスメソッドが呼ばれました' 10 end 11 12 #プライベートメソッドを定義 13 private 14 def call_private_method 15 p 'privateメソッドが呼ばれました' 16 call_private_method 17 end 18end 19 20#インスタンスメッソドを呼び出す 21instance = KindOfClasses.new 22instance.call_public_method 23#クラスメソッドを呼び出す 24KindOfClasses.call_class_method 25

↑ call_private_method内でプライベートメソッドを呼び出したコードでは、プライベートメソッドで指定した文章が表示されません。

なぜ、call_private_method内でプライベートメソッドを呼び出したコードの時は文章が表示されないのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

call_private_methodを定義はしているが呼び出していないからです。

Ruby

1#インスタンスメッソドを呼び出す 2instance = KindOfClasses.new 3instance.call_public_method 4#クラスメソッドを呼び出す 5KindOfClasses.call_class_method

のどこからもcall_private_methodを呼んでません。

また、

Ruby

1 def call_private_method 2 p 'privateメソッドが呼ばれました' 3 call_private_method 4 end

だと、一度呼ばれると自分自身を無限に呼び出し続けることになります。

投稿2021/06/19 22:20

otn

総合スコア84566

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

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

退会済みユーザー

退会済みユーザー

2021/06/20 16:46

試しに、プライベートメソッド内で、call_private_methodを定義して、呼び出してみたら、無限ループに陥ってしまいました。メソッド内で、呼び出すときは、同じメソッド内で定義しないように気を付けないといけませんね。回答ありがとうございました。
guest

0

call_private_methodを呼び出していないからです。

ruby

1instance.send(:call_private_method)

投稿2021/06/19 16:46

asm

総合スコア15147

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

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

退会済みユーザー

退会済みユーザー

2021/06/19 17:17

publicメソッド内で call_private_method と呼び出したときは、ちゃんとprivateメソッド内の内容が表示されます。 しかし、privateメッソド内で、 call_private_method と呼び出すと、privateメソッド内の内容は表示されないのです。 これは、privateメッソド内で、privateメッソドを呼び出すことは、できないということでしょうか?
asm

2021/06/19 22:49

publicメソッドは instance.call_public_method にて呼び出していますよね? それと同様にcall_private_methodをinstance作成後に呼び出さないと 「call_private_methodからcall_private_methodを呼び出せる」ことは検証できません。
退会済みユーザー

退会済みユーザー

2021/06/20 16:41

privateメソッドも、インスタンス外部から呼び出さなければ、表示はされないのですね。 詳しく教えて下さり、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問