从文件中调用类

时间:2019-01-18 20:06:01

标签: ruby

我正在编写一个包含两个文件的程序。我要做的第一个文件是初始化包含多个类的下一个文件。我在文件的底部调用该类,但它在文件的顶部运行该类。 顺便说一句,我正在运行红宝石

第一个文件:

Require ‘./secondfile.rb’

newfile.Lastclass

第二个文件:

class Firstclass

end

class Lastclass

end

2 个答案:

答案 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中,它是通过操纵根名称空间来实现的。

另一个注意事项是要密切注意所使用的斜杠。在您的代码中,您使用了反斜杠,这是不正确的。您还使用了错误的引号。通常编程时每个字符都很重要