3 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個贊
如果每個人都同意
return 在函數(shù)主體的末尾不需要
不使用return的速度稍微快一些(根據(jù)@Alan的測試,相對于5.1秒為4.3微秒)
我們都應(yīng)該return在函數(shù)結(jié)尾處停止使用嗎?我當(dāng)然不會,我想解釋原因。我希望聽到其他人是否也同意我的看法。如果這不是對OP的直接答案,而是更長時間的主觀評論,我深表歉意。
我不使用的主要問題return是,正如Paul指出的那樣,函數(shù)主體中可能還有其他地方需要使用它。而且,如果您被迫return在函數(shù)中間使用某個地方,為什么不使所有return語句都明確?我討厭前后矛盾。我也認(rèn)為代碼讀起來更好;可以掃描功能并輕松查看所有出口點(diǎn)和值。
保羅使用以下示例:
foo = function() {
if(a) {
return(a)
} else {
return(b)
}
}
不幸的是,可能有人指出它可以很容易地重寫為:
foo = function() {
if(a) {
output <- a
} else {
output <- b
}
output
}
后一種版本甚至符合一些編程編碼標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)倡導(dǎo)每個函數(shù)一個返回語句。我認(rèn)為一個更好的例子可能是:
bar <- function() {
while (a) {
do_stuff
for (b) {
do_stuff
if (c) return(1)
for (d) {
do_stuff
if (e) return(2)
}
}
}
return(3)
}
使用單個return語句重寫起來會更加困難:它將需要多個breaks和復(fù)雜的布爾變量系統(tǒng)來傳播它們。所有這一切都說明單一返回規(guī)則不能很好地與R配合使用。因此,如果您需要return在函數(shù)主體的某些位置使用它,為什么不保持一致并在各處使用它呢?
我認(rèn)為速度參數(shù)是無效的。當(dāng)您開始查看實(shí)際上可以執(zhí)行某些功能的函數(shù)時,0.8微秒的差異并不算什么。我能看到的最后一件事是輸入更少,但是,我并不懶惰。

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個贊
似乎沒有return()它會更快...
library(rbenchmark)
x <- 1
foo <- function(value) {
return(value)
}
fuu <- function(value) {
value
}
benchmark(foo(x),fuu(x),replications=1e7)
test replications elapsed relative user.self sys.self user.child sys.child
1 foo(x) 10000000 51.36 1.185322 51.11 0.11 0 0
2 fuu(x) 10000000 43.33 1.000000 42.97 0.05 0 0
____ 編輯__ _ __ _ __ _ __ __ _ __ _ ___
我繼續(xù)進(jìn)行其他基準(zhǔn)測試(benchmark(fuu(x),foo(x),replications=1e7)),結(jié)果相反...我將在服務(wù)器上嘗試。
- 3 回答
- 0 關(guān)注
- 742 瀏覽
添加回答
舉報