调用另一个不是gem的ruby文件

Syl*_*Syl 6 ruby class file

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

我的课就是这个:

class TestClass

  def say_hello
    puts "say hello"
  end
end
Run Code Online (Sandbox Code Playgroud)

在一个TestClass.rb文件中(我假设我是正确的,因为所有关于类的ruby教程都是一个完整的混乱,把所有东西放在一个神奇的东西(文件?),好像IRB是所有事情的开始和结束).

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

require 'TestClass.rb'

puts "start"
say_hello
Run Code Online (Sandbox Code Playgroud)

但它失败了:

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>'
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*Rob 16

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

require './testclass'
Run Code Online (Sandbox Code Playgroud)

不需要.rb

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

require './lib/testclass'
Run Code Online (Sandbox Code Playgroud)


Jör*_*tag 13

在99%的情况下,当计算机告诉你它找不到东西时,这是因为事情不存在.因此,您需要检查的第一件事文件TestClass.rb系统上是否存在名为somewhere的文件.

在99%的其他案例中,计算机正在寻找错误的地方.(嗯,实际上,计算机通常在正确的位置寻找,但它正在寻找的东西是在错误的地方).require加载从一个文件$LOAD_PATH,所以你必须确保该文件的目录TestClass.rb是在实际上$LOAD_PATH.

或者,如果您不希望require文件来自,$LOAD_PATH而是相对于正在执行的文件的位置require,那么您需要使用require_relative.

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

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

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