前提・実現したいこと
animal.rb, thinkable.rb, human.rb, main.rb の計4つのRubyファイルを作成し、
下記の実行結果にしたいです。
$ ruby main.rb
田中 太郎です。25歳です。
私は電車について考えています。
鈴木 次郎です。30歳です。
私は野球について考えています。
佐藤 花子です。20歳です。
私は映画について考えています。
➀Animalクラス ( animal.rb )
attr_accessor を使って、名前と年齢を格納する変数を定義
initializeに名前・年齢の情報を格納する引数を設定し、処理内容として名前・年齢の各変数を引数の情報で初期化する
say という名前のメソッドを定義
このメソッドを実行すると、変数に代入された名前と年齢を使って「○○です。△△歳です。」と画面に puts で表示する
➁Thinkableモジュール ( thinkable.rb )
think メソッドを中に定義
Human クラスに定義された”趣味”の文字列が入っている変数(後述) の中身を利用して「私は□□について考えています。」と画面に puts で表示する
➂Humanクラス( human.rb )
< を使って、Animal クラスを継承する。
think メソッドをThinkable モジュールを include。
attr_accessor を使って、趣味の情報を保管する変数を定義。
initializeに名前・年齢・趣味の情報を格納する引数を設定し、処理内容として名前・年齢・趣味の各変数を引数の情報で初期化。
④実行ファイル( main.rb )
以下のコードをひな形として利用。
require './human'
インスタンスの作成
tanaka = Human.new()
suzuki = Human.new()
sato = Human.new()
Humanクラスの initialize が正しく実行され、名前・年齢・趣味の各変数が引数の情報で初期化されるよう、引数を設定。
3人のインスタンスを作成し、say と think メソッドを実行する処理を追記。
下記のように記述しました。
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
thinkable.rb
module Thinkable
def think
puts '私は、#{self.hobby}について考えています。'
end
end
human.rb
require './animal'
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
end
main.rb
require './human'
tanaka = Human.new('田中太郎', 25, '電車')
tanaka.say
tanaka.think
suzuki = Human.new('鈴木次郎', 30, '野球')
suzuki.say
suzuki.think
sato = Human.new('佐藤花子', 20, '映画')
sato.say
sato.think
##下記、実行結果です。{self.name}{self.age}{self.hobby}が正しく表示されません。
↓
$ ruby main.rb
#{self.name}です。#{self.age}歳です。私は、#{self.hobby}について考えています。
#{self.name}です。#{self.age}歳です。私は、#{self.hobby}について考えています。
#{self.name}です。#{self.age}歳です。私は、#{self.hobby}について考えています
試したこと
ネット等を参考にしましたが、どこが問題かわからず、教えて頂きたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/02 13:21