如何从另一个Ruby文件执行Ruby文件
如何从另一个Ruby文件执行Ruby文件如何从另一个Ruby文件执行Ruby文件,ruby,Ruby,如何从另一个Ruby文件执行Ruby文件 class Launch def get_program begin files = ["sum_of_digits", "compressed_sequence", "shortest_repetition"] (0...files.length).each_with_index do |index| puts "#{index} . #{ files[index]}"
class Launch
def get_program
begin
files = ["sum_of_digits", "compressed_sequence",
"shortest_repetition"]
(0...files.length).each_with_index do |index|
puts "#{index} . #{ files[index]}"
end
begin
puts "Enter program number to execute: "
puts program_number = gets.chomp.to_i
puts "loading program #{files[program_number]}"
begin
load(`ruby #{files[program_number]}.rb
#{files[program_number]}.txt`)
rescue
puts "loading error"
end
puts "do you want to continue Y/N"
answer = gets.chomp
end until answer == 'N'
rescue
puts "the file cannot be loaded ,it may be moved or not exist "
end
end
end
launch = Launch.new
launch.get_program
launch = Launch.new
launch.get_program
执行时,我得到输出,但只有一个程序,循环终止。我希望在循环中执行文件,直到用户输入“N”。通常,您的代码不是以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
一些需要研究的东西:
和block
用于定义控制回路,而不是用于定义控制回路。嗯,他们可以,但是有更好、更地道的方法李>end
- 你用过,但我不认为那是你真正想做的。相反,您应该告诉操作系统在子shell中使用加载和运行代码,而不是在当前运行的代码的上下文中
- 您的代码应该至少使用
捕获异常,而不是使用裸rescue=>e
,这样您就可以输出发生的情况。在“真实生活”中,也就是在生产中,你应该更加敏锐,只捕捉你期望的例外情况,但这是一个不同的讨论rescue
- 当使用
/开始
/救援
时,尽量使它们尽可能小,至少在您更熟悉它们的工作方式之前<代码>救援是一种打击自己的好方法,调试由多行代码生成的引发的异常可能是一件痛苦的事情结束
通常,当您有一个可能发生更改的列表,或任何比代码其余部分更可能发生更改的变量时,请将该定义放在脚本的顶部,或类或模块定义的顶部,然后将其作为常量引用。这有助于避免在代码中撒上神奇的灰尘,如果你想添加或删除东西,就必须搜索这些代码。像文件。或者神奇的灰尘。
system()
?为什么循环在加载
调用之前结束?