我试图用Ruby gem包装命令行实用程序的功能(让我们称之为<?php
function subscribe_request($phone) {
<script src="js/subscrie.js" type="text/javascript">
//something
</script>
}
?>
)。我试图将一些功能抽象到不同的类中,但我希望有一个逻辑处理在一个方法中调用系统,以便我可以处理来自应用程序的错误单身。
我可以通过在gem
的主模块中定义一个方法来轻松完成此操作foo
然后每个类都可以通过这种方法将调用传递给可执行文件
module Foo
def self.execute(*args)
exec('foo', *args)
# Pretend there is a lot more error handling etc. here
end
end
理想情况下,我希望module Foo
class Bar
# Access via class method
def self.list_bars
Foo.execute('ls', 'bars')
end
# Access via instance method
def initialize
# Make a call to the system executable via the class method
Foo.execute('initialize', 'bar')
end
def config(*args)
Foo.execute('config', 'bar', *args)
end
end
end
方法私有,以便我模块的公共API完全是Foo.execute
的抽象。如果我将foo
标记为Foo.execute
,那么模块中的其他类(显然)无法访问它。
如何用Ruby 2.3简洁地完成这项工作?
值得注意的是,我实际上只是使用模块private
进行命名空间。
答案 0 :(得分:1)
ruby中的模块只是方法和常量的容器。类对它们构成的模块一无所知,也不从它们继承。所以没有办法让'Foo'上的方法可用于其中的所有类。
这种方法可能会给你你想要的东西。
module Foo
module CommandRunning
def execute(*args)
# ...
end
end
class Bar
include CommandRunning
def initialize
execute('initialize', 'bar')
end
end
end