【发布时间】:2011-08-11 11:45:23
【问题描述】:
我正在研究一个读取一些传感器信息并将其作为哈希返回的类。我想使用哈希键作为访问器,但我没有太多运气让它工作。到目前为止,这是我的代码的相关部分:
我已经尝试过使用 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] 的输出。目前,我所能得到的只是一个未定义的方法错误。有人知道我在这里做错了什么吗?
【问题讨论】:
标签: ruby methods hash accessor