最近在自学 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 的那个分支,所以:
补充:
我随后写了如下代码并不输入参数值直接跑:
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