根据this回答,我提供了以下代码
undefined local variable or method `username' for main:Object (NameError)
问题
我认为这在2014年有效,所以任何人都可以看到为什么这不适用于现代版本的Ruby?
#!/usr/bin/ruby
USAGE = <<ENDUSAGE
Usage:
rejse_dumper [-h] [-v] [-u username] [-p password] [-a address]
ENDUSAGE
HELP = <<ENDHELP
-h, --help Show this help.
-u, --username The login username.
-p, --password Force create over an existing directory,
-a, --address The URL [Defaults to 'https://example.com']
ENDHELP
ARGS = { address: 'https://example.com' } # Setting default values
ARGV.each do |arg|
case arg
when '-h','--help' then ARGS[:help] = true
when '-u','--username' then next_arg = :username
when '-p','--password' then next_arg = :password
when '-a','--address' then next_arg = :address
else
if next_arg
ARGS[next_arg] = arg
end
end
end
if ARGS[:help]
puts USAGE
puts HELP if ARGS[:help]
exit
end
puts username
puts password
puts address
答案 0 :(得分:2)
代码将命令行参数放入此部分的哈希值中:
if next_arg
ARGS[next_arg] = arg
end
但未设置个别变量,例如username
,password
等,因此您会看到错误。
所以你可以参考这样的论点:
ARGS[:username]
或将它们分配给各个变量:
username = ARGS[:username]
等
答案 1 :(得分:1)
不,你的假设不正确。
要使其正常工作,请更改:
puts username
puts password
puts address
为:
puts ARGS[:username]
puts ARGS[:password]
puts ARGS[:address]