Как изменить этот фрагмент - PullRequest
0 голосов
/ 13 января 2019

У меня есть функция, как показано ниже:

def test
    {
      testId: self.test_id,
      testTime: self.test_time,
      testType: self.test_type,
      city: self.city
      ......... many such variables 
     }
end

Мне интересно, есть ли хороший способ переписать этот кусок. Я хотел бы знать, что было бы лучше всего сделать.

Ответы [ 3 ]

0 голосов
/ 13 января 2019

Если я понял, также как указал Андреас Мюллер, возможно, метод automatic, приведенный ниже, это то, что вы ищете:

class Whathever
  attr_accessor :test_id, :test_time, :test_type, :city

  def initialize(*args)
    @test_id, @test_time, @test_type, @city = args
  end

  def manual
      {
        test_id: @test_id,
        test_time: @test_time,
        test_type: @test_type,
        city: @city
       }
  end

  def automatic
    self.instance_variables.each_with_object({}) { |v, h| h[v[1..-1].to_sym] = instance_variable_get(v) }
  end
end

whathever = Whathever.new('ID', 'TIME', 'TYPE', 'CITY')
whathever.manual
whathever.automatic
#=> {:test_id=>"ID", :test_time=>"TIME", :test_type=>"TYPE", :city=>"CITY"}
0 голосов
/ 13 января 2019

В случае, если мы не говорим о (всех) переменных экземпляра, а ключи хеш-функции должны быть верблюдом:

require 'active_support/core_ext/string/inflections' 
# or define your own camelize method 
# eg. str.split('_').tap { |a| a[1..-1].map!(&:capitalize) }.join

%w[test_id test_time test_type city].each_with_object({}) do |v, h| 
  h[v.camelize(:lower)] = send(v) 
end
0 голосов
/ 13 января 2019

Насколько я вижу, вы пытаетесь преобразовать объект в структуру данных Hash. Проверьте Ruby конвертировать объект в хэш

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...