Rubyのプライベートとプロテクトを簡単にご紹介します。
2022-02-01 23:34:31
以下のプログラムには長い間困らされました。Rubyのprivateの概念は本当に奇妙です。
class Test private
def test_print
puts 'test'
end
end
class Test2 < Test
def test_print2
# self.test_print #=> can't be called with self here, private method `test_print' called for # (NoMethodError)
test_print #=> can be called without self
end
end
Test2.new.test_print2
なぜprivateはselfを追加せずに親クラスのメソッドを呼び出せるのか?
Rubyでは、Javaなどと違って、privateはサブクラスから呼び出すことができますが、呼び出し元を指定することはできないことがわかりました。
Ruby Way』に目を通すと、こう書いてある。
プライベート クラスもサブクラスも呼び出すことができますが、privateメソッドは呼び出し元を指定することができず、デフォルトはselfです。
protected: クラスとサブクラスの両方が呼び出され、呼び出し元を指定できる。
このことから、上のコードでselfを付けて呼び出すとエラーになり、selfを付けない場合は正しく実行されることが分かります。
関連
-
Ruby変数の詳細分析
-
win10でvirtualbox+vagrantでrubyの開発マシン環境を構築する
-
UbuntuでRuby on RailsフレームワークとRubyMine IDEを設定する
-
Ruby Hash ハッシュ型 基本操作のメソッド一覧 まとめ
-
Rubyのオブジェクト指向プログラミングでクラスとメソッドの基本を学ぶ
-
Ruby on RailsのWebプロジェクト構築のためのシンプルガイド
-
デザインパターンにおけるDecoratorパターンを用いたRubyの例
-
Ruby on RailsのActiveResourceの使い方解説
-
Ruby on Railsのインストールに関する簡潔で迅速なガイド
-
Rubyプログラミングにおけるネーミングスタイルガイド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン