Ruby 在使用 ARGV [0] 这样的输入参数时,如果不输入值,ARGV [0] 获得的是什么值?

gu_bonjour · 2015年05月02日 · 最后由 gu_bonjour 回复于 2015年05月02日 · 2519 次阅读

最近在自学 Ruby 在看到读取文件的时候,书中代码是

filename = ARGV[0]
file = open(filename)
text =file.read
print text
file.close

文件名:read_text.rb

我突发奇想希望做一个判断,如果不输入参数就是用一个默认值,代码如下

input = ARGV[0]
filename= input=nil? "read_text.rb":input
file = open(filename)
text =file.read
print text
file.close

我直接空参数运行了 ruby read_text.rb然后直接报错

read_text.rb:2: syntax error, unexpected ':', expecting end-of-input
filename= (input=nil? "read_text.rb":input)

随后我将代码更改为

input = ARGV[0]
filename= input = "" ? "print_argv.rb": input
file = open(filename)
text = file.read
print text
file.close

但是这样的结果是,永远执行了 三元运算符 true 的那个分支,所以:

  • 如果不输入值,ARGV[0] 获得的是什么值?
  • 我这样使用三元运算符是否正确?

补充:

我随后写了如下代码并不输入参数值直接跑:

input = ARGV[0]
p input
p input = "" 
p input = nil 
p input == nil 

返回如下

nil
""
nil
true

感觉问题出在

filename = input == nil ? "print_argv.rb": input

这一句。

经过 2 楼提醒 我发现三元那段我用了全角括号,除添加空格,我重新将全角括号替换为半角后 发现程序执行正常:

input = ARGV[0]
filename = (input == nil ? "print_argv.rb" : input)
p filename
file = open(filename)
text = file.read
print text
file.close

你确定你用的是等号做判断么

#1 楼 @heylonj 是的啊 我现在觉得问题出在那句 三元运算符 那里~

问号前后空格,冒号前后空格。

#3 楼 @rei 经过你的提醒 我发现 三元那段的括号是全角....真是....太低级的错误了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号