Ruby 即使在使用$stdin.iflush刷新输入缓冲区后,也未刷新该缓冲区

Ruby 即使在使用$stdin.iflush刷新输入缓冲区后,也未刷新该缓冲区,ruby,file,io,flush,gets,Ruby,File,Io,Flush,Gets,我写了一个项目,其中有一个类,比如说Class1 class Class1 attr_accessor :file_var def initialize(input_file) @file_var = YAML.load_file(input_file) end .....some member function in which I read the input_file using file_var...

我写了一个项目,其中有一个类,比如说Class1

class Class1
    attr_accessor :file_var
    def initialize(input_file)
                    @file_var = YAML.load_file(input_file)
            end
    .....some member function in which I read the input_file using file_var......
    end
现在我把这个类1的对象作为一个成员

class Class2
 attr_accessor :f

     def initialize(input_file)
                   f = Class1.new(input_file)     
        end
        .....some member function in which I am using the read items from input_file......
        end
    end
到目前为止,它还可以正常工作,但当我向Class2添加一个成员函数时,我使用下面3条指令从用户那里获取输入

puts "Enter the input"
$stdin.iflush #instead of this I used other flush commands also listed on Google but it didn't work.
input = gets.chomp
现在主要的问题是,我没有停止输入,上面的命令是在一个循环中,所以我甚至没有停止一次输入,而是自动将输入填充到输入缓冲区中

当我显示gets中存储的值时,令人惊讶的是,它显示了class1的file_vardata_accessor从我作为参数提供给它的构造函数的input_file读取的数据。我不知道这些数据是怎么来的。此外,我还想关闭文件缓冲区文件_var,但根据该程序的要求,这是不可能的


欢迎解决方案

我不能按照你的代码,尝试张贴一个我理解,但这是最简单的例子,我可以解释从我的项目。我只解释了那些可能在输入问题中起作用的代码段。我想冒昧地猜测,您正是因为不了解哪些代码段可能在其中起作用才出现了这个问题。创建MCVE可以帮助您发现解决方案。原因1:我解释了Class1,以了解我是通过缓冲区读取文件的。原因2:我解释Class2是为了让您知道,我在后面提到的成员函数中使用的缓冲区之间几乎没有关系。原因3:我给出了成员函数的一个小片段,因为这才是真正给我带来问题的东西。我希望这能解释我为什么给出这么长的代码