2017-11-03 62 views
1

我已经在GitHub上一个有趣的应用程序。问题是我有一个错误,而且我根本不认识Ruby。红宝石未定义的方法each_slice错误

我有错误消息:

/Library/Ruby/Gems/2.0.0/gems/dmm_util-0.1.0/lib/dmm_util/fluke28x_driver.rb:274: 
in `parse_readings': undefined method `each_slice' for #<DmmUtil::ByteStr:0x007ffbf38e4620> (NoMethodError) 

在代码中,有:

require 'rubygems' 
require 'serialport' 
require 'enumerator' 

# ... 

def parse_readings(reading_bytes) 
    readings = {} 
    ByteStr.new(reading_bytes).each_slice(30) do |reading_arr| 
    r = reading_arr.map{|b| b.chr}.join 
    # All bytes parsed 
    readings[get_map_value(:readingid, r, 0)] = { 
          :value => get_double(r, 2), 
          :unit => get_map_value(:unit, r, 10), 
          :unit_multiplier => get_s16(r, 12), 
          :decimals => get_s16(r, 14), 
          :display_digits => get_s16(r, 16), 
          :state => get_map_value(:state, r, 18), 
          :attribute => get_map_value(:attribute, r, 20), 
          :ts => get_time(r, 22) 
    } 
    end 
    readings 
end 

我的红宝石版本是:2.0.0p648

+0

这是常见的红宝石仿佛参数reading_bytes的东西,是零值,则ByteStr.new的结果返回也是一个零值,所以代码的下一部分被调用方法each_slice但由于没有从ByteStr类创建的字符串,那么你得到了这个错误。如果字符串正确返回,则String类支持使用Enumerable。 –

+0

我添加了一些puts命令。 reading_bytes包含30个字符 – Noury

回答

1

问题是类,你”在一个未知类型的类上重新调用each_slice方法。 each_sliceenumerable方法,所以尝试将其转换为一个数组对象。这给一试:

 def parse_readings(reading_bytes) 
     readings = {} 
     bytestr = ByteStr.new(reading_bytes).chars.to_a 
     bytestr.each_slice(30) do|reading_arr| 
      r = reading_arr.map{|b| b.chr}.join 
      # All bytes parsed 
      readings[get_map_value(:readingid, r, 0)] = { 
            :value => get_double(r, 2), 
            :unit => get_map_value(:unit, r, 10), 
            :unit_multiplier => get_s16(r, 12), 
            :decimals => get_s16(r, 14), 
            :display_digits => get_s16(r, 16), 
            :state => get_map_value(:state, r, 18), 
            :attribute => get_map_value(:attribute, r, 20), 
            :ts => get_time(r, 22) 
      } 
      end 
      readings 
     end 
+0

我试过你的代码。我有一个错误:/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in'需要':/库/红宝石/宝石/ 2.0.0 /宝石/ dmm_util-0.1.0/LIB/dmm_util/fluke28x_driver.rb:275:语法错误,意想不到的 '',期待 ')'(的SyntaxError) 枚举= ByteStr.new(reading_bytes).enum_for以上:(each_slice,30) ^ – Noury

+0

更新。尝试将您的对象转换为数组。 – MisterCal

+0

我还尝试过,该错误消息为:/Library/Ruby/Gems/2.0.0/gems/dmm_util-0.1.0/lib/dmm_util/fluke28x_driver.rb:279:in'parse_readings“:未定义的方法'to_a”为#(NoMethodError) 我必须补充一点,我已经在代码后来发现:类ByteStr <字符串 别名:每个:each_byte 结束,我不知道这是很重要的 – Noury

相关问题