У меня есть этот рабочий код:
class Server
  def handle(&block)
    @block = block
  end
 def do
   @block.call
 end
end
class Client
  def initialize
    @server = Server.new
    @server.handle { action }
  end
  def action
    puts "some"
  end
  def call_server
    @server.do
  end
end
client = Client.new
client.call_server
Мой сервер будет обрабатывать более одного действия, поэтому я хочу изменить код таким образом:
class Server
  def handle(options)
    @block = options[:on_filter]
 end
 def do
   @block.call
 end
end
class Client
  def initialize
    @server = Server.new
   my_hash = { :on_filter => action }
   @server.handle(my_hash)
  end
  def action
    puts "some"
  end
  def call_server
    @server.do
  end
end
client = Client.new
client.call_server
Это неправильный код, потому что метод action() вызывает создание my_hash, но если я попытаюсь изменить код на:
my_hash = { :on_filter => { action } }
Я получаю сообщение об ошибке.
Можно ли создать хеш с помощью методов как хэш-значений?