2010-02-19 56 views
1

在Ruby中,什麼是返回一個值,如最佳/最優雅的方式:寫出更好的Ruby:如何將對象轉換爲false或true?

#method returns true or false if 'do i match' is present in string 
def method(str) 
    str =~ /do i match/ 
end 
+2

什麼是錯的代碼是什麼?它匹配時返回一個真值,否則返回一個真值。當期待一個布爾值時,你不應該使用'== true'或'== false'。 – rampion 2010-02-19 03:13:19

+0

它返回一個0或一個零。我認爲它應該返回真或假,在...到處都是非常標準的慣例?另外我沒有使用==真,如[方法]如果方法?是。看起來要比記得要記得我寫的API是否返回仲裁值,然後找到它們是什麼,然後編寫諸如method?.zero之類的邏輯好得多。 – Zombies 2010-02-19 04:01:31

+2

但我的觀點是,在Ruby中,一切,除了零和假是truish(甚至0!即使是空字符串!)所以,作爲你的方法表示,'把「我的工作!」如果方法('我匹配')'將打印「我工作!」。不需要'.zero?'。 – rampion 2010-02-19 14:52:59

回答

6

有些人會做的事:

def foo 
    !!(str=~/do i match/) 
end 

# or 

def foo 
    match = str=~/do i match/ 
    !!match 
end 

第二!運行感實性測試和否定回答,然後第一個!否定它再次得到最初的真相結果。

我寧願選擇更加明確的語法:

def foo 
    str =~ /do i match/ ? true : false 
end 

這是否感實性,但對我來說感覺更清晰。做你覺得最乾淨的事情。

4

我可能是說它是異教徒,但我認爲他們隱含回報是美麗的。在這種情況下,它評估爲真或假,但我可以看到人們可能會認爲這不清楚。

你可以保持隱式返回,使這個來代替:

str =~ /do i match/ ? true : false 
2

一種折衷的可讀性之間和性能

!str.match(/do i match/).nil? 
+1

你能不能用'not'更換'!'? – 2010-02-19 02:16:07

+1

在這個非常特殊的情況下使用'不'可以,但是在優先級之間存在差異!並不是。試試「puts!true」和「puts not true」。 – Trevoke 2010-02-19 14:51:51

相關問題