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

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

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

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

Q&A

解決済

1回答

587閲覧

Rubyのコードについて教えて頂きたいです

akariii2000

総合スコア1

Ruby

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

0グッド

0クリップ

投稿2021/01/02 10:40

編集2021/01/02 10:42

前提・実現したいこと

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}について考えています

試したこと

ネット等を参考にしましたが、どこが問題かわからず、教えて頂きたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

文字列を'で囲んでいるからですね。"で囲みましょう。

両者の違いをリファレンスで調べましょう。
文字列リテラル (Ruby 3.0.0 リファレンスマニュアル)

投稿2021/01/02 10:45

otn

総合スコア84551

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

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

akariii2000

2021/01/02 13:21

orne様 ありがとうございます。 ダブルクォーテーションに変更したところ解決できました。お送り頂いた文字列リテラルも確認致しました。 助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問