我有如下功能:
def test
{
testId: self.test_id,
testTime: self.test_time,
testType: self.test_type,
city: self.city
......... many such variables
}
end
我想知道是否有一种很好的方法可以重写这段内容。我想知道什么是最好的选择。
答案 0 :(得分:0)
据我所知,您正在尝试将对象转换为Hash数据结构。 检出Ruby convert Object to Hash
答案 1 :(得分:0)
如果我也明白这一点,正如AndreasMüller所指出的那样,也许下面的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"}
答案 2 :(得分:0)
如果我们不讨论(所有)实例变量,并且哈希键必须为驼峰式:
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