名称空间在 Ruby 中如何工作?
How namespaces work in Ruby?
我正在使用命名空间来组织我的代码,但现在我有点怀疑。我有以下代码:
module ShopApplication
module Models
class Product < ::Sequel::Model
# Model code
end
end
end
我所有的模型都包含在这个名为 Models
的模块中。在我的应用程序的另一部分,我有以下内容:
module ShopApplication
module WebInterface
class App < ::Sinatra::Base
get '/' do
@products = ShopApplication::Models::Product.all
end
end
end
end
我想在不指定完整路径的情况下使用我的模型。我可以将 @products = ShopApplication::Models::Product.all
转换为 @products = Product.all
吗?如果是,如何?我试过 include ::ShopApplication::Models
到 App
class,但是没有用。
Module#include
就是你要在这里使用的:
module ShopApplication
module Models
class Product < ::Sequel::Model
# Model code
end
end
end
module ShopApplication
module WebInterface
class App < ::Sinatra::Base
include ShopApplication::Models
get '/' do
@products = Product.all
end
end
end
end
这是一个人为设计的示例,其中没有您的依赖项,但显示了 class 方法和实例方法:
module ShopApplication
module Models
class Product
def name
"Product-name"
end
def self.all
["array", "of", "products"]
end
end
end
end
module ShopApplication
module WebInterface
class App
include ShopApplication::Models
def instance_meth
p Product.new.name
end
def self.class_meth
p Product.all
end
end
end
end
ShopApplication::WebInterface::App.new.instance_meth
ShopApplication::WebInterface::App.class_meth
我正在使用命名空间来组织我的代码,但现在我有点怀疑。我有以下代码:
module ShopApplication
module Models
class Product < ::Sequel::Model
# Model code
end
end
end
我所有的模型都包含在这个名为 Models
的模块中。在我的应用程序的另一部分,我有以下内容:
module ShopApplication
module WebInterface
class App < ::Sinatra::Base
get '/' do
@products = ShopApplication::Models::Product.all
end
end
end
end
我想在不指定完整路径的情况下使用我的模型。我可以将 @products = ShopApplication::Models::Product.all
转换为 @products = Product.all
吗?如果是,如何?我试过 include ::ShopApplication::Models
到 App
class,但是没有用。
Module#include
就是你要在这里使用的:
module ShopApplication
module Models
class Product < ::Sequel::Model
# Model code
end
end
end
module ShopApplication
module WebInterface
class App < ::Sinatra::Base
include ShopApplication::Models
get '/' do
@products = Product.all
end
end
end
end
这是一个人为设计的示例,其中没有您的依赖项,但显示了 class 方法和实例方法:
module ShopApplication
module Models
class Product
def name
"Product-name"
end
def self.all
["array", "of", "products"]
end
end
end
end
module ShopApplication
module WebInterface
class App
include ShopApplication::Models
def instance_meth
p Product.new.name
end
def self.class_meth
p Product.all
end
end
end
end
ShopApplication::WebInterface::App.new.instance_meth
ShopApplication::WebInterface::App.class_meth