代码之家  ›  专栏  ›  技术社区  ›  Thufir

用ruby实例化Foo?[副本]

  •  0
  • Thufir  · 技术社区  · 7 年前

    我该怎么做 instantiate bar.rb ?

    # foo.rb
    class Foo
      def initialize
        puts "foo"
      end
    end
    
    # bar.rb
    require 'foo'
    
    Foo.new
    
    $ ruby bar.rb 
    /home/thufir/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- foo (LoadError)
        from /home/thufir/.rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from bar.rb:2:in `<main>'
    

    目前未使用模块。在以下情况下工作正常 Foo 在同一脚本中声明:

    # bar.rb with Foo declared inside
    class Foo
      def initialize
        puts "foo"
      end
    end
    
    Foo.new
    
    $ ruby bar.rb 
    foo
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   jk_    7 年前

    堆栈跟踪告诉您 require 'foo' 无法工作,因为它找不到文件 foo.rb .

    那是因为 require 将您提供的参数解释为绝对路径,或者它在ruby加载路径中搜索指定的文件。

    您可以通过提供文件的绝对路径来解决此问题。在这种情况下: require '/home/thufir/hello/foo' 将为您工作。

    require_relative 'foo' ,它将搜索文件 傅。rb型 在与您的 bar.rb .

    https://ruby-doc.org/core-2.4.2/Kernel.html#method-i-require