有一个带有“命名空间”方法的类:
class MyOrder
def add
end
def edit
end
end
class MyCompany
def list
end
end
class MyDriver
def add
end
def edit
end
end
class MyAPI
attr_reader :order, :company, :driver
def initialize
@order = MyOrder.new
@company = MyCompany.new
@driver = MyDriver.new
end
end
想法是将方法分为几部分,以像下面这样调用它们:
api = MyApi.new
api.order.add
api.company.list
有什么方法可以在不创建容器类的情况下对方法进行分组?
class MyAPI
def initialize
@namespace = []
end
def self.namespace sym
define_method(sym){@namespace.push(sym); self}
end
namespace :order
namespace :company
namespace :driver
def add
case @namespace
when [:order] then ...
when [:driver] then ...
else raise "invalid namespace"
end
@namespace = []
self
end
def edit
case @namespace
when [:order] then ...
when [:driver] then ...
else raise "invalid namespace"
end
@namespace = []
self
end
def list
case @namespace
when [:company] then ...
else raise "invalid namespace"
end
@namespace = []
self
end
end
该self
在的方法到底是让你能够做到像链接
MyApi.new.order.add.company.list
如果您不需要这样做,则self
没有必要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句