Ruby - 创建一个文件作为变量的类 - 可能吗?

时间:2017-12-09 18:02:53

标签: ruby file class

我需要创建一个程序,用户可以在其中进行不同的测试。因为我不想复制粘贴我的代码全部为每个测试,我试图为此目的设置一个类 - 但我有这个类的问题。 错误消息=未定义的变量或' display_test'

中的方法

我已将预定义的som测试作为.txt文件

我想根据用户的回答选择班级中的文件 - 可能吗?

班级代码:

  class Test

    @correct_answers = 0

def display_question( question, options, answer )
  puts question
  options.each_with_index { |option, idx| puts "#{ idx + 1 }: #{ option
}" }
  print 'Answer: '
  reply = gets.to_i
  if answer == reply
    puts 'Correct!'
    @correct_answers += 1
    puts "#{@correct_answers}" 
  else
    puts 'Wrong. The correct answer was: ' + answer.to_s
  end
end



def display_test()
f = File.new(userinput, 'r')

while ! (f.eof?)        #logikken til at splitte
   line = f.gets()
   question = line.split("|")
   question[1] = question[1].split(";")
   display_question question[0], question[1], question[2].to_i
 end
end

display_test

puts "________________________________________________________"
puts "Total score:"

puts "You've got" + " #{@correct_answers}" + " correct answers!"

在我使用(" geografitest.txt")而不是File.new中的用户名之前,它看起来像这样:

f = File.new('geografitest.txt','r')

但现在我想让用户决定要采取什么样的测试。

我对红宝石很新,所以请耐心等待。 我试图这样做,显然不起作用。

puts "Which test do you want to take?"

select = 0

while (select != 3)
  puts "Press 1 to take Geografi test." 
  puts "Press 2 to take Math test." 
  puts "Press 3 to take Religion test."
  puts "Press 3 to exit"
  select = gets.chomp.to_i

if (select == 1)
  gets.chomp = userinput
  userinput =`geografitest.txt`
  echo $userinput
end

if (select == 2)
  gets.chomp = userinput
  userinput =`matematiktest.txt`
  echo $userinput
  end


if (select == 3)
  gets.chomp = userinput
  userinput =`religionstest.txt`
  echo $userinput
end 
if (select > 4)
  puts "Not a correct selection"  

elsif (select == 4)
  puts "Goodbye" 
end 

end
abort

所以现在我的问题; 如何让用户选择要进行的测试?我可以创建一个变量而不是我试过的文本文件,但是以不同的方式?或者有更聪明的方法吗?

我的班级错在哪,我该如何解决?我知道它不是制作它的方法,但我简直无法理解如何使它正确。

请帮助一个菜鸟出去。 干杯!

1 个答案:

答案 0 :(得分:0)

您可以根据用户输入和对象构造函数将文件作为依赖项传递给您。像这样的东西

class Test
  attr_reader :correct_answers_count

  def initialize(file)
    @file = file
    @correct_answers_count = 0
  end

  #other code goes here
end

loop do
  case user_input = gets.chomp
  when '1'
    file_name = 'some_file1'
  when '2'
    file_name = 'some_file1'
  when '3'
    break
  else
    puts 'wrong variant'
  end

  test = Test.new(File.new(file_name, 'r'))
  test.display
end