我正在编写一个包含两个文件的程序。我要做的第一个文件是初始化包含多个类的下一个文件。我在文件的底部调用该类,但它在文件的顶部运行该类。 顺便说一句,我正在运行红宝石
第一个文件:
Require ‘./secondfile.rb’
newfile.Lastclass
第二个文件:
class Firstclass
end
class Lastclass
end
答案 0 :(得分:1)
提示#1。最好不要使用.
这取决于您运行应用程序的目录。
例如,您有目录文件夹。那里有两个文件:
file.rb
puts "I'm file.rb"
main.rb
require './file.rb'
如果您从文件夹运行您的应用-可以:
folder$ ruby main.rb
I'm file.rb
但是,如果您要从较高级别运行它-这将是错误的:
folder$ cd ..
:~$ ruby folder/main.rb
kernel_require.rb:55:in `require': cannot load such file -- ./file.rb (LoadError)
但是在这种情况下怎么写?
提示2。您可以使用special method
main.rb
require "./#{__dir__}/file.rb"
现在在所有情况下都可以:
~$ ruby folder/main.rb
I'm file.rb
folder$ ruby main.rb
I'm file.rb
但是您可以写得更好。
提示3。您可以使用require_relative
main.rb
require_relative 'file.rb'
甚至更好。
main.rb
require_relative 'file'
Ruby理解它。
~$ ruby folder/main.rb
I'm file.rb
folder$ ruby main.rb
I'm file.rb
希望这对您有所帮助。
答案 1 :(得分:0)
如果定义了类,则将它们注入到根名称空间中。如果另一个文件定义了一个类,则 all 所有文件都将其获取:
require_relative './secondfile.rb'
Lastclass
这与JavaScript(例如Node.js)不同,在JavaScript中,您必须从其他文件中显式导入类。在Ruby中,它是通过操纵根名称空间来实现的。
另一个注意事项是要密切注意所使用的斜杠。在您的代码中,您使用了反斜杠,这是不正确的。您还使用了错误的引号。通常编程时每个字符都很重要。