Если вы измените свой EchoServer на класс и добавите attr_accessor для some_value, вы можете затем присоединить блок к стартовому серверу и передать значение в.
#!/usr/bin/env ruby
require 'rubygems'
require 'eventmachine'
class EchoServer < EM::Connection
attr_accessor :some_value
def post_init
puts "blah with #{some_value}"
end
def receive_data(data)
puts "#{some_value} received #{data}"
end
def unbind
puts "unbound"
end
end
v = "some_value"
EM.run do
EM.start_server "127.0.0.1", 8081, EchoServer do |conn|
conn.some_value = v
end
end
В вашем примере единственное отношение между Test и EchoServer состоит в том, что вы запустили цикл событий EM изнутри класса теста. Это не влияет на EM или на то, как он будет использовать EchoServer.