gpt4 book ai didi

ruby - 哈希键作为类中的访问器

转载 作者:数据小太阳 更新时间:2023-10-29 08:24:59 26 4
gpt4 key购买 nike

我正在研究一个读取一些传感器信息并将其作为散列返回的类。我想使用散列键作为访问器,但我不太幸运让它工作。到目前为止,这是我的代码的相关部分:

我已经尝试过使用 method_missing 和 :define_method 方法。

  attr_reader :sensor_hash

def method_missing(name, *args, &blk)
if args.empty? && blk.nil? && @sensor_hash.has_key?(name.to_s)
@sensor_hash[name.to_s]
else
super
end
end

def sensor(*sensor_to_return)
sensor_output = run_command(this_method_name)
sensor_output = sensor_output.split("\n")
sensor_output.map! { |line| line.downcase! }
unless sensor_to_return.empty?
sensor_to_return = sensor_to_return.to_s.downcase
sensor_output = sensor_output.grep(/^#{sensor_to_return}\s/)
end
@sensor_hash = Hash.new
sensor_output.each { |stat| @sensor_hash[stat.split(/\s+\|\s?/)[0].gsub(' ','_').to_sym] = stat.split(/\s?\|\s?/)[1..-1].each { |v| v.strip! } }
@sensor_hash.each do |k,v|
puts v.join("\t")
self.class.send :define_method, k { v.join("\t") }
end
return @sensor_hash

返回的数据是以传感器名称为键的散列,值是返回的所有其他内容的数组。我的目标是能够调用 Class.sensor.sensor_name 并获得 Class.sensor[:sensor_name] 的输出。目前,我所能得到的只是一个未定义的方法错误。有人知道我在这里做错了什么吗?

最佳答案

也许 OpenStruct 可以满足您的需求。来自doc :“它就像一个哈希,以不同的方式访问数据。实际上,它是用哈希实现的,你可以用一个来初始化它。”

require 'ostruct'
s=OpenStruct.new({:sensor_name=>'sensor1',:data=>['something',1,[1,2,3]]})
p s.sensor_name
#=> "sensor1"

关于ruby - 哈希键作为类中的访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com