尝试在ruby脚本中解码bin文件,但在运行脚本后,我得到以下错误test.rb:57:in read': no implicit conversion of nil into String (TypeError) from script:57:in
'
知道可能是什么问题吗?
提前致谢
require 'bindata'
class Decode < BinData::Record # size 4+
uint32le :record_count
array :records, :type => :cube_main_bin_record, :initial_length => :record_count
end
begin
f = ARGV[0] unless ARGV[0].nil?
bin = File.read(f)
Decode.read(bin).records.each_with_index do |rec, num|
puts "Record #{num} #{rec.to_binary_s.length}"
p rec
end
end
答案 0 :(得分:1)
因为File.read
需要字符串参数,并且f
默认为nil,而在没有命令行参数的情况下调用脚本
f = ARGV[0] unless ARGV[0].nil? # f defaults to nil when ARGV[0] is nil
bin = File.read(f) # bin = File.read(nil) BOOM
以下是您的代码的重构:
...
f = ARGV[0]
abort "filename required" unless f
bin = File.read(f)
...
这些变化可以完成两件事:
unless ARGV[0].nil?
来简化代码,该代码不做任何有用的操作会对将来维护您的代码的任何人产生误导,包括您自己