rubyの以下の様なプログラムがあるとします。
lang
1class Review 2 attr_accessor :genre, :title, :impression 3 @@review_count = 0 4 @@reviews = [] 5 def self.get_review_count 6 return @@review_count 7 end 8 9 def self.show_review 10 number = 0 11 @@reviews.each do |review| 12 puts "[#{number}]:#{review.title}のレビュー" 13 number += 1 14 end 15 puts "\n見たいレビューの番号を入力してください:" 16 input = gets.to_i 17 review = @@reviews[input] 18 review.show_review 19 end 20 21 def initialize 22 puts "タイトルを入力してください" 23 self.title = gets.chomp 24 puts "ジャンルを入力してください" 25 self.genre = gets.chomp 26 puts "感想を入力してください" 27 self.impression = gets.chomp 28 @@review_count = @@review_count + 1 29 @@reviews << self 30 show_review 31 end 32 33 def show_review 34 line = "---------------------------" 35 puts "ジャンル : #{self.genre}\n#{line}\n" 36 puts "タイトル : #{self.title}\n#{line}\n" 37 puts "感想 :\n#{self.impression}\n#{line}\n" 38 end 39 40end 41 42while true do 43 puts "書いたレビューの数:#{Review.get_review_count}" 44 puts "[0]レビューを書く" 45 puts "[1]レビューを読む" 46 puts "[2]アプリを終了する" 47 48 input = gets.to_i 49 50 if input == 0 51 review = Review.new 52 elsif input == 1 53 Review.show_review 54 elsif input == 2 55 exit 56 else 57 puts "入力された値は無効な値です" 58 end 59end
selfは省略できるので、以下のように変更したのですが、上手く行きません。
lang
1class Review 2 attr_accessor :genre, :title, :impression 3 @@review_count = 0 4 @@reviews = [] 5 def self.get_review_count 6 return @@review_count 7 end 8 9 def self.show_review 10 number = 0 11 @@reviews.each do |review| 12 puts "[#{number}]:#{review.title}のレビュー" 13 number += 1 14 end 15 puts "\n見たいレビューの番号を入力してください:" 16 input = gets.to_i 17 review = @@reviews[input] 18 review.show_review 19 end 20 21 def initialize 22 puts "タイトルを入力してください" 23 title = gets.chomp 24 puts "ジャンルを入力してください" 25 genre = gets.chomp 26 puts "感想を入力してください" 27 impression = gets.chomp 28 @@review_count = @@review_count + 1 29 @@reviews << self 30 show_review 31 end 32 33 def show_review 34 line = "---------------------------" 35 puts "ジャンル : #{genre}\n#{line}\n" 36 puts "タイトル : #{title}\n#{line}\n" 37 puts "感想 :\n#{impression}\n#{line}\n" 38 end 39 40end 41 42while true do 43 puts "書いたレビューの数:#{Review.get_review_count}" 44 puts "[0]レビューを書く" 45 puts "[1]レビューを読む" 46 puts "[2]アプリを終了する" 47 input = gets.to_i 48 49 if input == 0 50 review = Review.new 51 elsif input == 1 52 Review.show_review 53 elsif input == 2 54 exit 55 else 56 puts "入力された値は無効な値です" 57 end 58end
しかい、以下のようにinitializeメソッド内ではselfを使うと(show_reviewメソッドでは使わなくても)うまくいきました。
lang
1class Review 2 attr_accessor :genre, :title, :impression 3 @@review_count = 0 4 @@reviews = [] 5 def self.get_review_count 6 return @@review_count 7 end 8 9 def self.show_review 10 number = 0 11 @@reviews.each do |review| 12 puts "[#{number}]:#{review.title}のレビュー" 13 number += 1 14 end 15 puts "\n見たいレビューの番号を入力してください:" 16 input = gets.to_i 17 review = @@reviews[input] 18 review.show_review 19 end 20 21 def initialize 22 puts "タイトルを入力してください" 23 self.title = gets.chomp 24 puts "ジャンルを入力してください" 25 self.genre = gets.chomp 26 puts "感想を入力してください" 27 self.impression = gets.chomp 28 @@review_count = @@review_count + 1 29 @@reviews << self 30 show_review 31 end 32 33 def show_review 34 line = "---------------------------" 35 puts "ジャンル : #{genre}\n#{line}\n" 36 puts "タイトル : #{title}\n#{line}\n" 37 puts "感想 :\n#{impression}\n#{line}\n" 38 end 39 40end 41 42while true do 43 puts "書いたレビューの数:#{Review.get_review_count}" 44 puts "[0]レビューを書く" 45 puts "[1]レビューを読む" 46 puts "[2]アプリを終了する" 47 input = gets.to_i 48 49 if input == 0 50 review = Review.new 51 elsif input == 1 52 Review.show_review 53 elsif input == 2 54 exit 55 else 56 puts "入力された値は無効な値です" 57 end 58end
なぜinitializeメソッド内にselfを使わないと、上手く表示されないのでしょうか?
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/20 04:48