Rubyを学習中のものです。
同じ名前のクラスを定義して実行してみたのですが、エラーが
でませんでした。。
なぜなのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
クラスを再定義してエラーにならないのは オープンクラス という機能です。
定義済みのクラスを再度定義しようとすると、もとのクラスを再オープンして、メソッドの追加や上書きによる変更ができるようになっています。
これにより、 文字列などの基本型でさえ Ruby では変更することができます。
lang
1class String 2 def hello 3 'Hello ' + self 4 end 5end 6 7p "Yoshida".hello # "Hello Yoshida"
Rails や日本語文字用のライブラリーではこの機能を使って基本型を拡張し、より便利なものにしています。
ただし、これは危険な機能でもあるので、慣れないうちはあまり使用することはお勧めしません。
投稿2014/09/15 17:04
総合スコア863
0
ベストアンサー
エラーにならないのは、ruby の言語仕様です。
参照情報を紹介します。
...
Rubyにとって、クラスはたった一度の定義で固定されるものではありません。
プログラマは好きなときにクラスを「オープン」し、機能拡張することができます。
...
さっきと同じDogという名前でクラス定義を行ってみると、先に定義したsayも失われることなく、引き続き使えていることがわかります。つまりclass Dogで新しい定義が上書きされるのではなく、既存のDogクラスに機能を追加することができるのです。
自分で定義したクラスはもちろん、StringやArrayといった標準クラスも自在に拡張できます。このように「言語を使うプログラマを信頼し、大きな(そして場合によっては危険な)力を与える」というのも、Ruby言語仕様の特徴の一つです。
...
...
オープンクラスとは
既存するクラスを好きな場所で再オープンし、
メソッド修正・追加など任意の変更を加えられる機能のこと。
...
- teratail での別の質問
Ruby オープンなクラスというのはなんですか? https://teratail.com/questions/461
投稿2014/09/13 03:14
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。