Ruby中的“命名空间”方法

保罗

有一个带有“命名空间”方法的类:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章