我想创建一个带有函数库的静态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.此外,require并require_relative为自己找出正确的文件扩展名,所以你应该离开.rb.第三,标准的Ruby编码风格是缩进的两个空格,而不是四个.
当然,这些都不会导致您的代码无法正常工作,因为它纯粹是风格,但它可能会导致人们不愿回答您的问题,因为它表明您不尊重他们的社区,甚至不能学习基本规则.