在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
在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
有些人會做的事:
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
這是否感實性,但對我來說感覺更清晰。做你覺得最乾淨的事情。
我可能是說它是異教徒,但我認爲他們隱含回報是美麗的。在這種情況下,它評估爲真或假,但我可以看到人們可能會認爲這不清楚。
你可以保持隱式返回,使這個來代替:
str =~ /do i match/ ? true : false
一種折衷的可讀性之間和性能
!str.match(/do i match/).nil?
你能不能用'not'更換'!'? – 2010-02-19 02:16:07
在這個非常特殊的情況下使用'不'可以,但是在優先級之間存在差異!並不是。試試「puts!true」和「puts not true」。 – Trevoke 2010-02-19 14:51:51
什麼是錯的代碼是什麼?它匹配時返回一個真值,否則返回一個真值。當期待一個布爾值時,你不應該使用'== true'或'== false'。 – rampion 2010-02-19 03:13:19
它返回一個0或一個零。我認爲它應該返回真或假,在...到處都是非常標準的慣例?另外我沒有使用==真,如[方法]如果方法?是。看起來要比記得要記得我寫的API是否返回仲裁值,然後找到它們是什麼,然後編寫諸如method?.zero之類的邏輯好得多。 – Zombies 2010-02-19 04:01:31
但我的觀點是,在Ruby中,一切,除了零和假是truish(甚至0!即使是空字符串!)所以,作爲你的方法表示,'把「我的工作!」如果方法('我匹配')'將打印「我工作!」。不需要'.zero?'。 – rampion 2010-02-19 14:52:59