【问题标题】:Calling another ruby file that is not a gem调用另一个不是 gem 的 ruby​​ 文件
【发布时间】:2010-12-20 15:27:19
【问题描述】:

我想创建一个带有函数库的静态 ruby​​ 类。我在 Vista 上使用 ruby​​ 1.9.2

我的课是这个:

class TestClass

  def say_hello
    puts "say hello"
  end
end

在 TestClass.rb 文件中(我认为我是正确的,因为所有关于类的 ruby​​ 教程都是一团糟,将所有内容放在一个神奇的东西(文件?)中,就好像 IRB 是所有事情的开始和结束一样)。

我的 ruby​​ main()(是的,我来自 Java)或程序入口,或者在 ruby​​ 中调用它是:

require 'TestClass.rb'

puts "start"
say_hello

但它失败了:

C:\ruby_path_with_all_my_classes>ruby classuser.rb
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load --
 TestClass.rb (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from classuser.rb:1:in `<main>'

它是如何工作的?是否可以在 Ruby 中调用其他文件,或者您是否被困在一个包含所有类的文件中?

【问题讨论】:

  • 不要将[Ruby] 放在问题的开头。这就是标签的用途。

标签: ruby class file


【解决方案1】:

TestClass 文件是否在同一个目录中? 将 TestClass.rb 文件设为小写并加载它

require './testclass'

不需要.rb

我建议将任何类放在 lib 文件夹中。 然后你需要如下文件:

require './lib/testclass'

【讨论】:

  • 它工作正常,谢谢!哦,对于静态类,我使用 self.methodname
  • 是的,自己在 ruby​​ 中创建静态类方法
【解决方案2】:

在 99% 的情况下,如果计算机告诉您它找不到某物,那是因为该物不存在。因此,您需要检查的第一件事是在您的文件系统中的某处是否确实存在 一个名为 TestClass.rb 的文件。

在 99% 的其余案例中,计算机正在寻找错误的位置。 (嗯,实际上,计算机通常在正确的地方寻找,但它正在寻找的东西在错误的地方)。 require$LOAD_PATH 加载文件,因此您必须确保文件TestClass.rb 所在的目录实际上$LOAD_PATH 上。

或者,如果您不想从require 一个文件从$LOAD_PATH 而是相对于文件的位置正在执行 requireing,那么您需要使用require_relative

但是,请注意,您的代码无论如何都不会工作,因为 say_helloTestClass 类实例的实例方法,但您在 main 对象上调用它,它是Object,不是TestClass

另请注意,Ruby 文件的标准命名约定是snake_case,尤其是文件的主要类/模块的snake_case 版本。因此,在您的情况下,该文件应命名为test_class.rb。此外,requirerequire_relative 会为自己找出正确的文件扩展名,因此您应该省略 .rb。第三,标准 Ruby 编码风格是缩进两个空格,而不是四个。

当然,这些都不会导致您的代码无法正常工作,因为它纯粹是风格,但它可能导致人们不愿意回答您的问题,因为它表明您没有'没有足够尊重他们的社区来学习最基本的规则。

【讨论】:

  • 我在同一个文件夹中使用类,所以我很确定错误不是名称空间。谢谢,关于 ruby​​ 文件的信息不多,并且要求搜索结果都是关于 ruby​​gems 的。
【解决方案3】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多