2014-09-11 63 views
0

有没有办法做一个文件测试的情况下声明,我想是这样的:文件测试

case ARGV[0] 
when File.exist? 
    puts "File exists!" 
when "" 
    puts "No argument" 
end 

这似乎并没有工作,虽然。

+0

如果它是一个布尔我看不出有任何理由要使用'case'语句,理由不至少一个。 'case'语句意味着从一个任意长的选项列表中选择,这里不存在。 – 2014-09-11 13:17:44

回答

1

这里是什么样的呢case细分:

case ARGV[0] 
when File.exist?(ARGV[0]) # Note proper syntax for File.exist? 
    puts "File exists!" # Do this if value of ARGV[0] == result of File.exist? 
when "" 
    puts "No argument" # Do this if value of ARGV[0] == "" 
end 

显然,如果ARGV[0]不为空,这将无法正常工作。此外,无论ARGV[0]的值如何,它仍将执行File.exist?(ARGV[0]),因此它不会按照您的意图执行。

我假设你想检查是否知道参数后的文件存在不为零或空白:

if ARGV[0] and not ARGV[0].empty? 
    puts "File exists!" if File.exist?(ARGV[0]) 
else 
    puts "No argument" 
end 

如果ARGV[0]有一个值,但文件不存在,你还有没有输出。我不知道这是否是基于你的问题的意图,因为你没有表达预期的行为。

你也可以做这样的事情:

case ARGV[0] 
when "", nil 
    puts "No argument" 
else 
    puts "File exists!" if File.exist?(ARGV[0]) 
end 
+0

'File.exist?'需要一个参数 – Stefan 2014-09-11 12:28:53

+0

@Stefan确实如此。对不起,我有点懒惰。因为'File.exist?'的语法并不影响主要观点,所以我只是模仿OP在这里的任何内容。但很好,我会相应更新。 – lurker 2014-09-11 12:30:19