Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 线程和类_Ruby_Multithreading_Class - Fatal编程技术网

Ruby 线程和类

Ruby 线程和类,ruby,multithreading,class,Ruby,Multithreading,Class,我对ruby是新手。我创建了一个名为Station的类,如下所示: class Station def initialize() @no_crates = 5 while(true) sleep(1) @no_crates = Integer(@no_crates) + 1 end end def get_no_crates() return @no_crates end end 变量@no_crates应该随着时间的

我对ruby是新手。我创建了一个名为Station的类,如下所示:

class Station

  def initialize()
    @no_crates = 5
    while(true)
      sleep(1)
      @no_crates = Integer(@no_crates) + 1
    end
  end

  def get_no_crates()
    return @no_crates
  end
end
变量@no_crates应该随着时间的推移而增加,所以我想在一个单独的线程中运行这个类。我如何才能做到这一点,然后不时调用get_no_crates()函数来获取@no_crates

我尝试了以下方法,但没有成功

st =  Thread.new{ Station.new()}
while(true)
  sleep(1)
  puts st.get_no_crates()
end

看看这个,试着去理解你做错了什么

class Station

  def initialize()
    @no_crates = 5
  end

  def run
    while(true)
      sleep(1)
      @no_crates = Integer(@no_crates) + 1
    end
  end

  def get_no_crates()
    return @no_crates
  end
end


station = Station.new
st =  Thread.new{ station.run }
while(true)
  sleep(1)
  puts station.get_no_crates()
end
这是一个更好看的版本

class Station

  attr_reader :no_crates

  def initialize
    @no_crates = 5
  end

  def run
    loop do
      sleep 1
      @no_crates = @no_crates + 1
    end
  end
end

station = Station.new
st =  Thread.new{ station.run }
loop do
  sleep 1 
  puts station.no_crates
end

为什么我会得到这么多的反对票?贾扎卡拉·哈伊尔又一次支持更好的版本