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

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

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

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

Q&A

解決済

3回答

1722閲覧

Ruby オープンクラスについて

nails

総合スコア13

Ruby

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

0グッド

0クリップ

投稿2014/09/30 03:45

オープンクラスは、既にあるクラスを好きな場所で再オープンして、
メソッドを修正したり追加したりするというのが
よく理解できません。

どなたかオープンクラスを使った、
サンプルプログラムを教えていただけませんか?
宜しくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

既にあるクラスは String, Integer などの基本型のクラスを考えるとわかりやすいかもしれません。
オープンクラスの機能により、すでにあるそういったクラスも使いやすいように拡張できるようになります。

例えば、この機能を利用して Rails では Object (すべてのクラスの上位クラス) にメソッドを追加しています。

lang

1class Object 2 def blank? 3 respond_to?(:empty?) ? !!empty? : !self 4 end 5end

Object にメソッドを追加しているので、blank? はすべてのオブジェクトで使用できます。
文字列か nil が入っているような変数に対して、空かどうか調べることはよくあるのですが、empty? と違い、nil かどうかの場合分けが不要になります。

lang

1a = nil 2a.blank? # true 3a = "" 4a.blank? # true

また、以前あった質問の方にもオープンクラスのサンプルコードを書いています。

投稿2014/10/01 06:26

yohshiy

総合スコア863

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

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

0

lang

1 2class Fixnum 3 def *(x) 4 puts '掛け算が分かりません' 5 end 6end 71 * 2 8

とすると、掛け算が分からないrubyに大変身!!

投稿2014/10/01 10:16

skz

総合スコア145

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

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

0

以下はオープンクラスを使っています。

lang

1class String 2def msg 3p '新着メッセージです。' + self 4end 5end 6 7'Hello!'.msg 8 9'こんにちは'.msg 10 11'hello!'.msg 12

これであらゆる文字列がmsgメソッドを利用できます。

オープンクラスは強力ですが、
String、Arrayクラスも破壊できてしまうので注意が必要です。

投稿2014/10/01 02:30

tarou

総合スコア233

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問