Ruby模板设计模式文件夹约定
我要求提供一个关于如何使用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
项目
目录,其中有一个场馆.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