前提・実現したいこと
少し長くなってしまいますが、ご教授お願いします。
仕様
Animalクラス ( animal.rb )
Humanクラスの親となるクラスです。
attr_accessor を使って、名前を格納する変数と年齢を格納する変数を定義してください。(苗字と名前は分けなくてOKです。変数名は自由とします。)
initializeに名前・年齢の情報を格納する引数を設定し、処理内容として名前・年齢の各変数を引数の情報で初期化するようにしてください。引数の名前は自由とします。
say という名前のメソッドを定義してください。このメソッドを実行すると、変数に代入された名前と年齢を使って「○○です。△△歳です。」と画面に puts で表示するように処理を作りましょう。
Thinkableモジュール ( thinkable.rb )
クラスではなく モジュール として作ってください。
think メソッドを中に定義してください。このメソッドを実行すると、Human クラスに定義された”趣味”の文字列が入っている変数(後述) の中身を利用して「私は□□について考えています。」と画面に puts で表示するように処理を作りましょう。
Humanクラス( human.rb )< を使って、Animal クラスを継承する記述を入れてください。
Thinkable モジュールの think メソッドを、このクラスで使えるようにしたいので、Thinkable モジュールを include してください。
attr_accessor を使って、趣味の情報を保管する変数を定義してください。変数名は自由とします。
initializeに名前・年齢・趣味の情報を格納する引数を設定し、処理内容として名前・年齢・趣味の各変数を引数の情報で初期化するようにしてください。引数の名前は自由とします。
実行ファイル( main.rb )
以下のコードをひな形として利用してください。
require './human'
#インスタンスの作成
tanaka = Human.new()
suzuki = Human.new()
sato = Human.new()
#メソッドを実行
上記のひな形では new の括弧内に何も引数を記述できていません。Humanクラスの initialize が正しく実行され、名前・年齢・趣味の各変数が引数の情報で初期化されるように、引数を設定してください。
発生している問題・エラーメッセージ
/home/ec2-user/environment/kadai-ruby-3/human.rb:3:in `<top (required)>': uninitialized constant Animal (NameError)というエラーメッセージが表示されます。
クラスの定義を読み込めないことに原因があると分かったので、クラスの記述の仕方などをネットで記載されているサンプルコードを参考にして確認したのですが間違いが分かりませんでした。
該当のソースコード
animal.rbのコードです。
#クラス定義
class Animal
#オブジェクトの変数(値)
attr_accessor :name, :age
#インスタンス初期化用の特別なメソッド
def initialize(name, age)
self.name = name
self.age = age
end
#オブジェクトのメソッド(処理)
def say
puts "#{self.name}です。#{self.age}歳です。"
end
end
#インスタンスの生成と、変数への代入
animal = Animal.new("田中 太郎", 25)
animal.say
animal = Animal.new("鈴木 次郎", 30)
animal.say
animal = Animal.new("佐藤 花子", 20)
animal.say
thinkable.rbのコードです。
module Thinkable
def think
puts "私は{@self.hobby}について考えています。"
end
end
human.rbのコードです。
require "./thinkable"
class Human < Animal
#オブジェクトの変数(値) attr_accessor :hobby #インスタンス初期化用の特別なメソッド def initialize(name, age, hobby) self.name = name self.age = age self.hobby = hobby end #includeでThinkableの処理を利用 include Thinkable
end
main.rbのコードです。
require "./human"
#インスタンスの作成
tanaka = Human.new("田中 太郎", 25, "電車")
human.say
human.think
suzuki = Human.new("鈴木 次郎", 30, "野球")
human.say
human.think
sato = Human.new("佐藤 花子", 20, "映画")
human.say
human.think
### 出力したい実行結果
$ ruby main.rb
田中 太郎です。25歳です。
私は電車について考えています。
鈴木 次郎です。30歳です。
私は野球について考えています。
佐藤 花子です。20歳です。
私は映画について考えています。
回答1件
あなたの回答
tips
プレビュー