我有一個命令行工具,可以生成平坦的json文檔。想象一下:在命令行參數中指定nil
$ ruby gen-json.rb --foo bar --baz qux
{
"foo": "bar"
"baz": "qux"
}
我想是這樣工作的:
$ ruby gen-json.rb --foo $'\0' --baz qux
{
"foo": null,
"baz": "qux"
}
而不是空的,我得到一個空字符串。爲了簡化問題,甚至進一步考慮這個問題:
$ 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]視爲空字符結束的C字符串。
附: perl的行爲方式相同 – jaybuff
由於ASCII中的字符數爲0的字符串是空字符串? –
ASCII代碼0是NUL,C用於終止字符串數組。所以你不能沒有C字符串。我建議Ruby解釋器應該讀取一個字符串,如果它只是NUL,那麼將var設置爲零。這可能會破壞一堆東西,因爲ARGV [0]的類型不再是String。所以我不認爲我想要的是可能的。 – jaybuff