Ruby 使继承的函数动态化

Ruby 使继承的函数动态化,ruby,inheritance,Ruby,Inheritance,我有一个Ruby项目,它具有以下体系结构: 我的所有子控制器(city1、city2)都从项目根目录下的父控制器继承。我在父控制器中有一个方法: class Controller def get_directories Dir.chdir(File.dirname(__FILE__) + "/") Dir.glob('*').select { |f| File.directory? f } end end 我的孩子控制器: require_relative '../c

我有一个Ruby项目,它具有以下体系结构:

我的所有子控制器(city1、city2)都从项目根目录下的父控制器继承。我在父控制器中有一个方法:

class Controller
  def get_directories
    Dir.chdir(File.dirname(__FILE__) + "/")
    Dir.glob('*').select { |f| File.directory? f }
  end
end
我的孩子控制器:

require_relative '../controller'

class City1Controller < Controller
end
require_relative '../controller'

class City1Controller < Controller
  def get_directories
    super(__FILE__)
  end
end
这就是我想要发生的:

controller.get_directories => city1 city2  
city1_controller.get_directories => monument1 monument2  
city2_controller.get_directories => monument3 monument4 
如果我在每个子控制器中重复完全相同的方法(从而覆盖父定义),它将按照我想要的方式工作。但这难道不是遗产应该给我们的吗


问题在于方法本身,在于继承如何工作,还是在于我如何使用它

正如塞尔吉奥已经指出的:
文件不是一种方法。它是对当前文件名的引用,它返回一个与其所在文件的相对路径

一个选项可能是将
\uuuu文件\uuuu
传递给如下方法:

class Controller
  def get_directories(file = __FILE__)
    Dir.chdir(File.dirname(file) + "/")
    Dir.glob('*').select { |f| File.directory? f }
  end
end
以及子控制器:

require_relative '../controller'

class City1Controller < Controller
end
require_relative '../controller'

class City1Controller < Controller
  def get_directories
    super(__FILE__)
  end
end
require_relative'../controller'
类别1控制器<控制器
def get_目录
超级文件
结束
结束

require_relative'../controller'
class City2控制器<控制器
def get_目录
超级文件
结束
结束

直接在此处发布所有内容。问题的任何部分都不应依赖于外部站点。如果您有代码,请将其作为文本而不是图片发布到此处。对不起,我必须排除我的文本stackoverflow不喜欢的部分(给出了代码错误)问题在于如何使用它<代码>文件不是一种方法,您不应该期望它有类似方法的行为。
require_relative '../controller'

class City2Controller < Controller
  def get_directories
    super(__FILE__)
  end
end