我有 2 个脚本:
测试1.rb
require 'test2.rb'
puts "hello"
test2.rb
puts "test"
我通过执行来运行它ruby test2.rb test1.rb
。
但只是test
打印出来而不是hello
。
您只需要运行ruby test1.rb
并且该require
语句应该为您拉入 test2.rb - 您也不需要将它放在命令行上。(这将尝试运行 test2.rb,将字符串“test1.rb”作为参数传递,这不是你想要的)
编辑:require
默认情况下,该语句在尝试查找“test2.rb”时不会在当前目录中查找。您可以通过将其更改为显式指定它:
require File.dirname(__FILE__) + '/test2.rb'
在 test1.rb 中做(假设 test2.rb 在同一目录中,否则给出相对于 test1.rb 的路径)
require_relative 'test2.rb'
puts "hello"
并在命令行上做ruby test1.rb
这也应该有效
require './test2.rb'
puts "hello"
有一些解释如何解决您的问题,但没有说明出了什么问题。
使用参数test1.rbruby test2.rb test1.rb
调用 ruby 脚本。
您可以访问常量中的参数ARGV
。
此脚本的示例:
puts "test"
puts 'ARGV= %s' % ARGV
调用它时的结果:
C:\Temp>ruby test.rb test2.rb
test
ARGV= test2.rb
因此,您还可以编写如下程序:
require_relative ARGV.first
第一个参数定义要加载的脚本。
或者,如果您想加载许多脚本,您可以使用:
ARGV.each{|script| require_relative script }