如何创建我自己的可替代IO的类,以便为某些接受IO类参数的代码重定向/捕获输入/输出?IO本身似乎与OS文件描述符耦合,我所知道的唯一一个模仿它的类没有子类化它是StringIO,它似乎只是重新实现了整个接口.
我认为该语言将提供一种直接的方式来做到这一点,但我找不到有关该主题的任何信息.是否有一个mixin在几个原语之上实现接口,就像Enumerable一样?
我怀疑我错过了一些东西,但假设情况并非如此......
为什么子类化不是一种选择?难道你不能直接覆盖 IO 中需要表现不同的部分吗?
class MyIO < IO
# your modified methods go here. e.g.
def some_io_method(args)
do_some_preprocessing
super(args)
do_some_post_processing
end
end
Run Code Online (Sandbox Code Playgroud)
如果你不能替换你的自制子类,那么修改 IO 本身(“猴子修补”)怎么样:
class IO
alias_method :original_some_io_method, :some_io_method
def some_io_method(args)
do_some_preprocessing
original_some_io_method(args)
do_some_post_processing
end
end
Run Code Online (Sandbox Code Playgroud)