2014-09-11 48 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