这真的不可行。名称空间仅在类上可用,而在实例级别不可用,因此
Clickup::Users
会有用但是
Clickup.new::Users
不能。你也许可以用一些元编程来实现,但这会有点复杂,并且会使你的代码更难理解。
不要错误地认为名称空间不仅仅是这样-
命名空间
. 仅仅因为A::B在A中嵌套了B,并不意味着存在B
他们之间的关系。他们有完全不同的状态和行为。
下面是一个有点类似的方法,可以工作,但它使你不得不重写
initialize
几次。不过,这可能是件好事。这意味着每个类都是独立工作的,并且只能有
注意,我冒昧地将4-空格缩进改为2,因为这在Ruby中是正常的。
class Clickup
def initialize(config)
@config = config
end
def users
Users.new(@config)
end
def lists
Lists.new(@config)
end
module Users
def initialize(config)
@config = config
end
def get_all
# make call to get all users
end
end
module Lists
def initialize(config)
@config = config
end
def get_all
# make call to get all lists
end
end
end
用法和你的想法相似:
clickup = Clickup.new(foo: "bar")
clickup.users.get_all # calls Users#get_all
clickup.lists.get_all # calls Lists#get_all
事实上,我只是想起了一件事。。。
::
事实上
是
的别名
.
. 这不是通常使用的,但从技术上讲,可以使用您想要的确切呼叫签名:
clickup = Clickup.new(foo: "bar")
clickup::users.get_all # calls Users#get_all
clickup::lists.get_all # calls Lists#get_all