Eug*_*ene 3 ruby methods hash accessor
我正在开发一个读取一些传感器信息并将其作为哈希值返回的类。我想使用哈希键作为访问器,但我没有太多运气让它工作。到目前为止,这是我的代码的相关部分:
我已经尝试过使用 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
Run Code Online (Sandbox Code Playgroud)
返回的数据是以传感器名称作为键的哈希值,值是返回的所有其他内容的数组。我的目标是能够调用Class.sensor.sensor_name并获取Class.sensor[:sensor_name]. 目前,我所能得到的只是一个未定义的方法错误。有人知道我在这里做错了什么吗?
也许 OpenStruct 可以满足您的需求。来自文档:“它就像一个散列,以不同的方式访问数据。事实上,它是用散列实现的,你可以用一个散列来初始化它。”
require 'ostruct'
s=OpenStruct.new({:sensor_name=>'sensor1',:data=>['something',1,[1,2,3]]})
p s.sensor_name
#=> "sensor1"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1953 次 |
| 最近记录: |