объем потока в Ruby - PullRequest
       14

объем потока в Ruby

1 голос
/ 12 июля 2011

Есть ли способ области видимости переменных в потоке без необходимости все передавать, учитывая класс с помощью следующих методов:

  def initialize
    @server = TCPServer.new('localhost',456)
  end

  def start
    threads = []
    while (upload = @server.accept)
      threads << Thread.new(upload) do |connection|
         some_method_here(connection)
      end
    end
    threads.each {|t| t.join }
  end

  def some_method_here(connection)
     variable = "abc"
     another_method(connection,variable)
  end

  def another_method(connection,variable)
      puts variable.inspect
      connection.close
  end

Ответы [ 3 ]

6 голосов
/ 12 июля 2011

если я правильно понял, вы хотите использовать локальные переменные потока (см. ruby ​​rdoc для темы # [])

Из документа:

   a = Thread.new { Thread.current["name"] = "A"; Thread.stop }
   b = Thread.new { Thread.current[:name]  = "B"; Thread.stop }
   c = Thread.new { Thread.current["name"] = "C"; Thread.stop }
   Thread.list.each {|x| puts "#{x.inspect}: #{x[:name]}" }

produces:

   #<Thread:0x401b3b3c sleep>: C
   #<Thread:0x401b3bc8 sleep>: B
   #<Thread:0x401b3c68 sleep>: A
   #<Thread:0x401bdf4c run>:

Итак, ваш пример будет использовать

Thread.current[:variable] = "abc"
Thread.current[:variable] # => "abc"

везде, где вы использовали variable до

1 голос
/ 12 июля 2011

Thread.current[:variable_name] = ...?

0 голосов
/ 07 июня 2013

Вы можете попробовать round_filter в ApplicationController

around_filter :apply_scope 
  def apply_scope 
  Document.where(:user_id => current_user.id).scoping do 
  yield 
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...