MacOS 上的 Ruby/IRB 环境问题

标签 ruby irb

我有一个 ruby​​ 脚本由于我的环境而失败,我认为 irb 中的这种奇怪行为证明了这一点(我也在使用 rvm 但不认为这是问题所在)

>> ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9.8.0]
>> irb
>> FileUtils.mkdir_p('tmp')
    NameError: uninitialized constant FileUtils
        from (irb):1
>> help
    => nil
>> FileUtils.mkdir_p('tmp')
     => "tmp" 

FileUtils 命令最初失败,但在键入 Help(同样失败)后它似乎可以工作。

我已尝试要求“rubygems”和要求“FileUtils”——这确实解决了问题——但我想了解这里发生了什么。

最佳答案

我不知道有一个“帮助”命令,但显然它依赖于 FileUtils,可能是为了加载帮助文件。 “帮助”正在将其要求加载到 IRB session 中。

>> before = ObjectSpace.each_object.map { |i| i.class }.uniq
=> [Regexp, String, Array, Class, Hash, Module, Proc, MatchData, File, Binding, NoMemoryError, Float, SystemStackError, fatal, Bignum, Object, IO, Thread, ThreadGroup, IRB::Locale, IRB::Notifier::LeveledNotifier, IRB::Notifier::CompositeNotifier, IRB::StdioOutputMethod, IRB::Notifier::NoMsgNotifier, Enumerable::Enumerator, RubyToken::TkNL, RubyToken::TkEND, RubyToken::TkBITOR, RubyToken::TkIDENTIFIER, RubyToken::TkDOT, RubyToken::TkRBRACE, RubyToken::TkSPACE, RubyToken::TkfLBRACE, RubyToken::TkCONSTANT, RubyToken::TkASSIGN, IRB::SLex::Node, IRB::SLex, RubyLex, IRB::ReadlineInputMethod, IRB::WorkSpace, IRB::Context, IRB::Irb]
>> help
=> nil
>> after  = ObjectSpace.each_object.map { |i| i.class }.uniq
=> [Regexp, String, MatchData, Array, Class, RI::ClassEntry, RI::MethodEntry, Hash, Module, Dir, Proc, File, Binding, NoMemoryError, Float, SystemStackError, fatal, Bignum, Object, IO, Thread, ThreadGroup, IRB::Locale, Range, IRB::Notifier::LeveledNotifier, IRB::Notifier::CompositeNotifier, IRB::StdioOutputMethod, IRB::Notifier::NoMsgNotifier, YAML::Syck::Resolver, Gem::ConfigFile, RubyToken::TkNL, RubyToken::TkIDENTIFIER, IRB::SLex::Node, IRB::SLex, RubyLex, IRB::ReadlineInputMethod, IRB::WorkSpace, IRB::Context, IRB::Irb, RI::TopLevelEntry, RI::RiReader, GetoptLong, RI::RiCache, RI::Options, RiDriver, Rational, Date::Infinity, Enumerable::Enumerator, RubyToken::TkRBRACE, DefaultDisplay, RI::TextFormatter]
>> after == before
=> false
>> after - before
=> [RI::ClassEntry, RI::MethodEntry, Dir, Range, YAML::Syck::Resolver, Gem::ConfigFile, RI::TopLevelEntry, RI::RiReader, GetoptLong, RI::RiCache, RI::Options, RiDriver, Rational, Date::Infinity, DefaultDisplay, RI::TextFormatter]

它加载after - before 中的类。你说的 FileUtils 在哪里?我认为它是 Dir 的一部分的模块,但我不是 100% 这么认为。

关于MacOS 上的 Ruby/IRB 环境问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776677/

相关文章:

ruby - 在 irb 中访问加载源中的变量

ruby-on-rails - Ruby on Rails 查询多个字段

ruby-on-rails - rails 4 asset pipeline assets.rb 重构问题

ruby - 根据用户输入循环创建

ruby - Pry的提示配置中的nest_level是什么意思?

python - Ruby 内联文档

ruby-on-rails - 根据来自另一个模型(rails)的信息限制对模型的所有访问

ruby - 好的 ruby 资源?

ruby - 如何用 ruby​​ 显示文件夹下的所有 html 文件?

ruby-on-rails-3 - 显示长值/字符串后,rails 控制台 pry/irb "stuck"