2013-02-23 48 views
0

下面是一個Ruby的函數,用來檢查爲特定的目錄,並創建它,如果它不的一部分已經存在:使用「迴歸:」

if Dir.exists?(dir_name) == false 
    Dir.mkdir(dir_name) 
end 

我明白,有做的更短的方式完全一樣的東西:

Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name) 

但是,我不太明白這一點。第二個命令的重要部分是? return :。命令的第一部分有要檢查的參數,最後一部分有要採取的操作,但我無法理解? return :。如果我希望在命令的最後一部分執行的動作當且僅當dir_name確實已經存在,我會用什麼來代替? return :

+0

可能重複(HTTP:/ /stackoverflow.com/questions/4252936/how-do-i-use-the-conditional-operator-in-ruby) – 2013-02-24 03:06:13

回答

3

您應該使用

Dir.mkdir(dir_name) unless Dir.exists?(dir_name) 

unless <statement>相同if !<statement>。切記不要做出將布爾值與另一個布爾值進行比較的語句。

例如,增加您的第一條語句

if Dir.exists?(dir_name) == false 

if !Dir.exists?(dir_name) 

unless Dir.exists?(dir_name) 

Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name)使用ternary operator的可讀性。

return立即退出函數,通常返回像return "some value"的值,但你也可以叫return退出功能,返回nil

冗長的故事短暫的三元版本打破了功能,如果目錄存在,所以沒有任何功能會發生。所以相當於

Dir.exists?(dir_name) ? nil : Dir.mkdir(dir_name) 
+0

感謝您建議使用「除非」。我沒有意識到Ruby有它。我發現我仍然從C編程中習慣了。 – jhsu802701 2013-02-24 06:15:20

2

這是另一種寫if-else的方法。

Condition ? IfTrue : IfFalse 

所以,

Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name) 

是一樣的:

if Dir.exists?(dir_name) 
    return 
else 
    Dir.mkdir(dir_name) 
end 
的[我如何使用條件運算符(:)在紅寶石?]
+0

謝謝。現在我看到問號後面的第一個命令(冒號前面)是真實場景,第二個命令(冒號後面)是錯誤場景。所以冒號意味着「否則」。 – jhsu802701 2013-02-24 06:12:58