Ruby 未在eval';d脚本

Ruby 未在eval';d脚本,ruby,eval,Ruby,Eval,我有一个ruby脚本,我像这样加载和评估它。下面是一个简化的示例,删除了无关的详细信息: eval_me.rb: puts 'Hi there! What\'s your name?' name = gets puts "Hi, #{name}!" script = File.read('eval_me.rb') eval script main.rb: puts 'Hi there! What\'s your name?' name = gets puts "Hi, #{name}!"

我有一个ruby脚本,我像这样加载和评估它。下面是一个简化的示例,删除了无关的详细信息:

eval_me.rb

puts 'Hi there! What\'s your name?'
name = gets
puts "Hi, #{name}!"
script = File.read('eval_me.rb')
eval script
main.rb

puts 'Hi there! What\'s your name?'
name = gets
puts "Hi, #{name}!"
script = File.read('eval_me.rb')
eval script
这导致了一个可怕的异常,
get
未定义

奇怪的是,将
gets
调用更改为
$stdin.gets
会起作用

1) 为什么会这样 2) 还有哪些职能部门会出现类似问题


其他(可能无用)信息:我还尝试将所有内容包装在类中的方法中,就像这样,尽管没有什么区别:

class EvalMe
  def execute
    # Same code as before ...
  end
end
。。。并通过一些奇特的反射调用它(将
eval_me
映射到
EvalMe
,调用
EvalMe.new
,然后调用
execute


。。。尽管它导致了相同的错误。

我无法使用Ruby 2.0上的示例复制此问题。您如何运行
main.rb
?还有什么吗?@ZachKemp是的,很多东西。我在Linux(和Windows)上运行Ruby 1.9.3。如果您感兴趣,可以分叉存储库并像这样运行
main.rb
ruby main.rb configure\u git\u id
。它运行
/server/actions/common/configure\u git\u id.rb
,当前使用
$stdin.get
。请提供一个最小的可复制示例。通常,您只需将字符串传递给eval,因此将代码内联到脚本变量中应该会产生与读取文件相同的结果。使用ruby的保存级别可能会有所不同,但我想这将是一个非常糟糕的windows配置。@phoet我认为上面的脚本会重新解决这个问题。如果不是,这可能不是Ruby的问题,而是我正在做的事情。我来看看。