我有一个文件foo.rb
,其中包含以下内容:
class Foo
def do_stuff
puts "Doing stuff"
end
def do_other_stuff
puts "Doing other stuff"
end
end
f = Foo.new
f.do_stuff
我希望在另一个文件bar.rb
中使用此文件并访问Foo
类中的方法,而不执行foo.rb
中的说明。
期待输出:
Doing other stuff
我在bar.rb
中尝试了以下内容:
require 'foo'
f = Foo.new
f.do_other_stuff
但是,要求文件执行foo.rb
的代码,我的输出是这样的:
Doing stuff
Doing other stuff
有没有办法解决这个问题?
答案 0 :(得分:2)
要求文件将执行代码。我认为这是一个糟糕的设计,你想要实现的目标。但是,您仍然可以通过将代码放在if __FILE__ == $0
块:
if __FILE__ == $0
f = Foo.new
f.do_stuff
end
if __FILE__ == $0
将确保块内的代码仅在直接运行时执行,而不是在需要时执行,如示例所示。
答案 1 :(得分:1)
如果您只想阻止输出,请执行以下操作:
stdout_old = $stdout.dup
stderr_old = $stderr.dup
$stderr.reopen(IO::NULL)
$stdout.reopen(IO::NULL)
require "foo"
$stdout.flush
$stderr.flush
$stdout.reopen(stdout_old)
$stderr.reopen(stderr_old)
答案 2 :(得分:0)
我想要在另一个文件
bar.rb
中使用此文件并访问Foo
类中的方法,而不执行foo.rb
中的说明。
由于执行Foo
中的指令,foo.rb
类中的方法是定义的 ,这显然是非感性且不可能的:要么Foo
},然后你必须执行说明,或者你没有执行说明,但是你没有得到Foo
。