类型错误:没有将 nil 隐式转换为 String

克里斯

尝试在 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
吉姆·乌

因为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)
...

这些变化完成了两件事:

  1. 当在没有所需文件名的情况下调用脚本时,它将优雅地中止并解释问题。
  2. 通过删除unless ARGV[0].nil?不做任何有用的事情来简化代码会误导将来维护您的代码的任何人,包括您自己

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

没有将nil隐式转换为String错误

全新安装的 Ruby 错误(没有将 nil 隐式转换为 String)

使用没有 => 的哈希时,没有将 nil 隐式转换为 String

TypeError:没有使用gsub将nil隐式转换为String

TypeError(没有将nil隐式转换为String),仅在生产中

Rails 使用多个数据库 - 没有将 nil 隐式转换为 String

eRuby - 在 if 语句中比较数字时没有将 nil 隐式转换为 String

无法更新Calabash-sandbox Ruby“没有将nil隐式转换为String”

TypeError:没有将nil隐式转换为String。utils.rb:24:in'quote_ident'

TypeError(没有将nil隐式转换为String)生产环境上的Rails devise-jwt gem

Rails:不会将nil隐式转换为String

控制器规格.reload错误:没有将nil隐式转换为Hash

没有将HTTParty :: Response隐式转换为String

没有将Array隐式转换为String吗?

没有将Hash隐式转换为String(TypeError)

没有将String隐式转换为Integer(TypeError)

没有将 ActiveSupport::HashWithIndifferentAccess 隐式转换为 String?

+:没有将Integer隐式转换为String(TypeError)

ROR +无法将数据存储在数据库中(TypeError异常:没有将nil隐式转换为String)

C# 返回错误“无法将类型‘int’隐式转换为‘string’”,即使没有给出 int

无法隐式将类型string []转换为string

Ruby错误-'+':没有将Fixnum隐式转换为String(TypeError)

Ruby错误:“没有将Fixnum隐式转换为String”

如何解决JSON解析错误:“没有将String隐式转换为Integrer”?

无法将类型'string'隐式转换为'decimal'

Unity无法将类型“ string”隐式转换为“ bool”

无法将类型'string'隐式转换为'bool'[If语句]

无法将类型'string'隐式转换为'integer'

heroku toolbelt`initialize':没有将nil隐式转换为Hash(TypeError)