일부 센서 정보를 읽고 해시로 반환하는 클래스 작업 중입니다. 나는 해시 키를 접근 자로 사용하고 싶지만, 나는 그것을 얻는 것이별로 행운이 아니다. 여기까지 내 코드의 관련 부분은 다음과 같습니다.클래스의 접근 자로서 해쉬 키
나는 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]
의 출력을 얻는 것입니다. 현재 내가 알 수있는 것은 정의되지 않은 메소드 오류입니다. 아무도 내가 여기서 뭘 잘못하고 있는지 알지 못해?
이것은 내가 찾고있는 것입니다. method_missing 메서드를 Hash 클래스에 넣어야한다는 것을 알지 못했습니다. 그것은 트릭을했다. – Eugene