はじめに、前投稿でゲッターで得た値をインスタンス名.ゲッターメソッド名で出力可能ですと記述いたしましたが、
**誤りでした、申し訳ありません。**インスタンスの値が代入された、変数を用いる場合、変数.ゲッターメソッド名で出力致します。
以下、プライベートメソッドについての投稿です。
また、今回投稿するに当たって参考にさせて頂いたURLです。
ありがとうございました。
https://26gram.com/private-protected-in-ruby
https://qiita.com/kidach1/items/055021ce42fe2a49fd66
プライベートメソッドとはprivate以下の記述をクラス外から呼び出すことが出来ないというものです。
class Fruits
private
def name
puts "りんご"
end
end
apple = Fruits.new
apple.name
出力結果
private method `name' called for #<Fruits:0x00007fe767832538> (NoMethodError)
この記述ですと、インスタンスメソッドがprivateより以下に記述されていますので、出力できません。
エラーが生じます。クラス外から、呼び出すことが出来ないからです。
また、次のような記述もエラーが生じます。
class Fruits
apple.name
private
def name
puts "りんご"
end
end
apple = Fruits.new
出力結果
undefined local variable or method `apple' for Fruits:Class (NameError)
では、どうすることが適切なのでしょうか。
private以上に以下の記述を呼び出すメソッドを定義しまして、
そのメソッドをクラス外から呼び出します。
class Fruits
def info
name
end
private
def name
puts "りんご"
end
end
apple = Fruits.new
apple.info
出力結果
りんご
また、親クラスのプライベートメソッドは子クラスで呼び出すことも可能です。
class InfoFruits
private
def name
puts "りんご"
end
end
class Fruits < InfoFruits
def info
name
end
end
apple = Fruits.new
apple.info
出力結果
りんご
最後に、親クラスのprivateメソッドであるゲッターを利用しまして、
その値を出力しています。
class InfoFruits
private
def name #ゲッター
@name
end
end
class Fruits < InfoFruits #実態のあるインスタンスは継承できませんが、定義されたインスタンスメソッドとインスタンス変数は用いることができます。
def fruit_name(info_fruit_name)
@name = info_fruit_name #インスタンス変数の定義
end
def info #プライベートメソッドnameを呼び出しています。
name
end
def info_fruit
puts "#{name}" #前投稿で**インスタンス名.ゲッターメソッド名**で出力可能と記述いたしましたが、
#誤りでした、すみません。インスタンスの値が代入された、変数を用いる場合は**変数.ゲッターメソッド名**で出力致します。
#今回、変数を用いていませんので、この形で出力が可能となります。
end
end
apple = Fruits.new #インスタンスの生成
apple.info #プライベートメソッドを呼び出す為のメソッドを呼び出しています。
apple.fruit_name("りんご") #fruit_nameメソッドに引数を渡しています。
apple.info_fruit #info_fruitメソッドを呼び出しています。
出力結果
りんご
以上となります。
誤っている箇所、認識が不足している部分について、ご指摘頂ければ幸いに存じます。