2017-11-03 64 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

相關問題