- ベストアンサー
Rubyで継承を用いて人種ごとの特徴を表現する方法
- Rubyを使って継承を用いて、人種ごとの特徴を表現する方法を教えてください。
- 具体的には、人を親クラスとし、アジア人、アフリカ人、ヨーロッパ人を子クラスとして作成し、人種ごとの特徴をそれぞれのクラスで定義します。
- また、特徴にアクセスするためのメソッドも定義し、継承関係が維持されるようにします。最終的に、結果を出力したいので、その方法も教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
不具合修正は、ANo1さんが仰られているとおりだと思います。 出力方法一般に関しては、文字列っぽいもの(ここではget_foobarの返り値)を出力系メソッド(print, puts, p等)に渡してやれば問題ありません。 例えばこんな感じですね http://ideone.com/61F0H <おまけ> 今回の内容を、少しだけRubyっぽくしてみました。 http://ideone.com/puQ38 # アクセサ名称 get_fooやset_fooという命名ルールは使わない方がいいでしょう。 Rubyに於いてはインスタンス名称をそのまま活用するアクセサが好まれます。 obj.get_foo → obj.foo obj.set_foo → obj.foo = このようなルールを用いる事で、言語自体が備えているアクセサ定義メソッド(attr_reader等)の助けを借りることも出来ます。 # インスタンス変数名称 余程有名な形か特徴的なprefixでも無い限り、省略形は可読性を下げます。 今回はフルでの記載をおすすめします。 conti → continent # 本題からは外れる内容なので、設計については省きます。 ・クラスやモジュールを通して、値が共通である → インスタンス単位で状態を持つ必要がないため、定数等へ ・インスタンス生成時に値を指定しなかった際のみ、標準値を採用する 等々、いろいろ試しながらRubyの機能に触れてみてください
その他の回答 (1)
- tatsu99
- ベストアンサー率52% (391/751)
class Europeanについて以下のように修正してください。 irb(main):035:2> super(europa) を super(:europa) irb(main):036:2> @white=color を @color = :white irb(main):043:2> @white を @color (class African 及び class Asian も同じように修正します。) 最後に以下の行を入力します。(class Europeanのサンプル) man1 = European.new man1_con = man1.get_conti man1_col = man1.get_color p man1 p man1_con p man1_col 他に間違いではありませんが気がついた点を2つほど述べます。 1.class Europeanのメソッドであるget_contiは無くてもかまいません。 無い場合は、class Peopleのget_contiが呼び出されます。 2.このような大量のソースを打ち込む場合 Interactive Rubyでは大変なので、通常のrubyを使用されてはいかがでしょうか。 上記で打ち込んだ内容をたとえばtest.rbというファイルに保存し、 ruby test.rbとすれば同じ結果が表示されます。 また、間違いがあったとき、test.rbのファイルの内容を修正し、簡単に再試験ができます。
お礼
丁寧に教えていただきありがとうございました。とても参考になりました。
お礼
丁寧に教えていただきありがとうございました。細かなところまで、とても勉強になりました。