我有一个生成平面 json 文档的命令行工具。想象一下:
$ ruby gen-json.rb --foo bar --baz qux
{
"foo": "bar"
"baz": "qux"
}
我想要的是这个工作:
$ ruby gen-json.rb --foo $'\0' --baz qux
{
"foo": null,
"baz": "qux"
}
而不是 null 我得到一个空字符串。为了简化问题,进一步考虑:
$ cat nil-args.rb
puts "argv[0] is nil" if ARGV[0].nil?
puts "argv[0] is an empty string" if ARGV[0] == ""
puts "argv[1] is nil" if ARGV[1].nil?
我想像这样运行它并得到这个输出:
$ ruby nil-args.rb $'\0' foo
argv[0] is nil
但相反我得到
argv[0] is an empty string
我怀疑这(可以说)是 ruby 解释器中的一个错误。它将 argv[0] 视为一个以 null 结尾的 C 字符串。