Ruby:在不同文件中的类,但彼此使用

时间:2016-04-11 22:25:53

标签: ruby

在我的一个项目中,我需要将两个类定义放在一个文件中,将它们的父类放在另一个文件中。在我需要父文件后,它仍然提供uninitialized constant Foo。查看下面的代码。问题是:如何使它工作(从文件2运行)?

#file1.rb
require_relative './file2.rb' 

class Bar < Foo
  get('/bar') { 'bar' }
end
class Car < Foo
end

#file2.rb
require_relative './file1.rb'

class Foo 
  get('/foo') { 'foo' }
end
class Dar < Foo
  Bar.new
  Car.new
end

2 个答案:

答案 0 :(得分:0)

首先定义父类,然后定义派生类。这也使您的代码更易于导航,因为它以可预测的顺序,先决条件优先,后期专业化。

最后定义是不可能的,Ruby绝对需要知道Foo是什么。尽管如此,你可以躲开它:

class Foo
end

class Bar < Foo
end

class Foo
  # Re-open class and add functionality
  get('...)
end

我建议尽可能避免这种做法。它通常最终会在两个地方累积代码,并且可能发生令人讨厌的重复错误。

答案 1 :(得分:0)

我不确定这个问题是否与循环依赖有关,但我确实想办法避免这个bug。使用另一个文件需要两个文件,并从新文件执行。

#file1.rb
class Bar < Foo
  get('/bar') { 'bar' }
end
class Car < Foo
end

#file2.rb
class Foo 
  get('/foo') { 'foo' }
end
class Dar < Foo
  Bar.new
  Car.new
end

#file_root.rb
require './file1'
require './file2'

仅供参考,您可能已经发现我正在使用来自'get'方法的Sinatra。因此file_root.rb文件实际上是config.ru