如何从另一个Ruby文件执行Ruby文件

时间:2017-04-14 06:50:43

标签: ruby

如何从其他Ruby文件执行Ruby文件?

target

执行时,我收到输出,但只有一个程序,循环正在终止。我想循环执行文件,直到用户输入" N"。

1 个答案:

答案 0 :(得分:0)

通常,您的代码不是以Ruby方式编写的。这是未经测试的,但它看起来是正确的:

class Launch

  FILES = ['sum_of_digits', 'compressed_sequence', 'shortest_repetition']

  def get_program
    FILES.each_with_index do |fname, i|
      puts "#{i} . #{fname}"
    end  

    loop do
      puts "Enter program number to execute: "
      program_number = gets.to_i   
      file_to_load = FILES[program_number]
      puts "loading program #{file_to_load}"

      begin
        system("ruby #{file_to_load}.rb #{file_to_load}.txt")
      rescue => e
        puts "loading error: #{e}"
        puts "'#{file_to_load}' cannot be loaded, it may have been moved or not exist."
      end

      puts 'Do you want to continue Y/N'
      break if gets.chomp.strip.upcase == 'N'
    end
  end
end

launch = Launch.new
launch.get_program

要研究的一些事情:

  • blockend用于start exception handling,而不是用于定义控制循环。好吧,他们可以,但有更好,更惯用的方式。 loop is recommended by Matz
  • 您使用了load,但我并不认为这是您真正想做的事情。相反,您应该告诉操作系统使用system在子shell中加载和运行代码,而不是在当前运行的代码的上下文中。
  • 您的代码至少应使用rescue来捕获异常,而不是使用裸rescue => e,因此您可以输出发生的内容。在"现实生活",AKA,制作中,你应该更加挑剔,只捕捉你期望的例外,但这是一个不同的讨论。
  • 使用begin / rescue / end时,尽量让它们尽可能小,至少在您更熟悉它们的工作方式之前。 rescue是一种很好的方法,可以让自己陷入困境,调试可能由多行代码生成的异常可能是一种痛苦。

通常,如果您有可能更改的内容列表,或者任何比其他代码更可能更改的变量,请将该定义放在脚本的顶部,或类或模块定义的顶部,然后将其作为常量引用。如果你想添加或删除东西,这有助于避免在必须搜索的代码中撒上神奇的灰尘。喜欢文件。还是神奇的尘埃。

相关问题