Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby模板设计模式文件夹约定_Ruby_Design Patterns - Fatal编程技术网

Ruby模板设计模式文件夹约定

Ruby模板设计模式文件夹约定,ruby,design-patterns,Ruby,Design Patterns,我要求提供一个关于如何使用Ruby中的模板设计模式构建项目目录的高级概述 我有一个项目目录,其中有一个场馆.rb文件和一个包含base.rb的文件夹。我看到它们在我的公司RubyonRails项目中被大量使用,但我想了解如何独立于Rails构建模板设计模式的项目 当前设置: 地点.rb ~./项目/地点/基地.rb 当我运行场馆.rb时,我得到: #=> ruby venue.rb Loaded module Base: Loaded class Venue: venue.rb:9:in

我要求提供一个关于如何使用Ruby中的模板设计模式构建项目目录的高级概述

我有一个
项目
目录,其中有一个
场馆.rb
文件和一个包含
base.rb
的文件夹。我看到它们在我的公司RubyonRails项目中被大量使用,但我想了解如何独立于Rails构建模板设计模式的项目

当前设置: 地点.rb ~./项目/地点/基地.rb 当我运行
场馆.rb
时,我得到:

#=> ruby venue.rb
Loaded module Base:
Loaded class Venue:
venue.rb:9:in `<main>': undefined method `base' for #<Venue:0x007fe77209cf20>         
(NoMethodError)
#=>ruby-venue.rb
加载的模块基座:
载客上课地点:
地点:rb:9:in``中:未定义的方法'base'用于#
(命名者)

我很确定我误解了继承,但我相信这应该行得通。

您在
vention.rb
中缺少模块名称空间,通过添加它,您可以修复未定义的类,还可以删除类定义存根

require_relative 'base'

puts "Loaded class Venue:"

a = Base.Venue.new
a.base

Ruby中
require
(和
require\u relative
)的好处在于,它几乎等同于用脚本文本替换
require

所以你的
场馆.rb
非常

module Base
  class Venue
    def base
      puts "base"
    end
  end
end

puts "Loaded module Base:"

class Venue
end

puts "Loaded class Venue:"

a = Venue.new
a.base
这声明了两个名为
Venue
的不同类,它们位于不同的命名空间中:
::Venue
Base::Venue
。当您执行
a=vention.new
时,您指的是
::vention
一个没有
基本方法(或任何方法)的方法

如果您想让您的
基本
模块修改顶级
场馆
,您需要特别参考它:

module Base
  class ::Venue
    def base
      puts "base"
    end
  end
end
require_relative 'base'

puts "Loaded class Venue:"

a = Base.Venue.new
a.base
module Base
  class Venue
    def base
      puts "base"
    end
  end
end

puts "Loaded module Base:"

class Venue
end

puts "Loaded class Venue:"

a = Venue.new
a.base
module Base
  class ::Venue
    def base
      puts "base"
    end
  end
end