Ruby中的Require方法

Ruby中的Require方法,ruby,file,parameters,user-input,require,Ruby,File,Parameters,User Input,Require,我一直在四处寻找,但似乎找不到这个问题的答案 我需要编写一个程序,该程序将使用ruby中内置的反射方法来告诉我有关用户将指定的类的信息 我有这个方法: def validFile(input) filename = String.new() filename = Dir.getwd + "/" + input require(filename) end 但是我得到了这个错误: internal:lib/rubygems/customrequire:29:in '

我一直在四处寻找,但似乎找不到这个问题的答案

我需要编写一个程序,该程序将使用ruby中内置的反射方法来告诉我有关用户将指定的类的信息

我有这个方法:

def validFile(input)  
  filename = String.new()  
  filename = Dir.getwd + "/" + input  
  require(filename)  
end  
但是我得到了这个错误:

internal:lib/rubygems/customrequire:29:in 'require' no such file to load --         C:\Users\David\Ruby Projects\MyTestClass.rb
我不确定这为什么不起作用,但这确实起作用:

def validFile(input)
  filename = Dir.getwd + "/MyTestClass.rb"
  require(filename)
end
这段代码对我没有帮助,因为我必须让用户指定文件。我使用gets方法获取用户输入,并将其作为参数传递给此方法


它们不都是字符串吗?我做错了什么?另外,我正在Windows7上运行最新版本的ruby。谢谢您的帮助。

您可以使用
File.exist?(文件名)
查看文件或目录是否存在。这将有助于缩小问题的范围。

以防万一。在将其作为参数传递之前,
gets
是否对通过
gets
获得的字符串进行了
chomp
处理?如果没有,那么它将在末尾包含额外的回车字符。您需要像
input=gets.chomp

那样删除它们。很可能,您是通过
gets
获得此输入的。在这个方法中使用
chomp
或者使用更常见的习惯用法
gets.chomp
。所以你可以这样做

def do_require(input)
  require( Dir.getwd + "/" + input )
end

do_require gets.chomp

仅供参考,您的filename=String.new()不起任何作用,因为您正在为filename分配一个新的值,直到清除它。谢谢你。我花了两个小时胡闹,现在觉得自己真的很傻。