【问题标题】:instantiate Foo with ruby? [duplicate]用红宝石实例化Foo? [复制]
【发布时间】:2018-04-10 05:53:06
【问题描述】:

我如何从bar.rbinstantiateFoo ?

# 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

【问题讨论】:

    标签: ruby class oop require instantiation


    【解决方案1】:

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

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

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

    您也可以使用require_relative 'foo',它将在与您的bar.rb 相同的目录中搜索文件foo.rb

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 2012-09-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      相关资源
      最近更新 更多