背景:
我有一个模块,它声明了许多实例方法
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
我想从一个类中调用其中一些方法。通常如何在红宝石中执行以下操作:
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
问题
include UsefulThings
引入的所有方法UsefulThings
。在这种情况下,我只想要format_text
并且明确地不想get_file
和delete_file
。
我可以看到几种可能的解决方案:
- 以某种方式直接在模块上调用该方法,而无需在任何地方包含它
- 我不知道如何/是否可以这样做。(因此出现此问题)
- 不知何故包括
Usefulthings
并且仅引入其中的某些方法- 我也不知道该如何/是否可以做到
- 创建一个代理类,包括
UsefulThings
其中,然后委托format_text
给该代理实例- 这会起作用,但是匿名代理类是一个hack。uck
- 将模块分成2个或更多个较小的模块
- 这也将起作用,并且可能是我能想到的最好的解决方案,但是我宁愿避免使用它,因为最终会产生数十个模块,因此管理起来很麻烦
为什么在一个模块中有很多不相关的功能?它ApplicationHelper
来自一个Rails应用程序,我们的团队事实上已将其确定为所有不够具体的东西的垃圾场。大多数情况下,独立实用程序方法随处可见。我可以将其分解为单独的帮手,但其中有30个,每个都只有一种方法...这似乎毫无用处
module UT; def add1; self+1; end; def add2; self+2; end; end
并且想要使用,add1
但没有add2
在课堂上使用Fixnum
。具有模块功能对此有何帮助?我想念什么吗?
Module#included
回调方法触发另一个模块,从而使一个模块始终自动包含另一个模块include
。该format_text
方法可以移到它自己的模块中,因为它似乎很有用。这样可以减轻管理负担。