摘要:
只有兩種方式對R知道else子句屬於if語句上面:
- 整個if ... else語句(和也許還有其他一些陳述)用括號括起來;
- 其他詞與if子句的結尾出現在相同的行上。
證據:
上面的討論幫助我,但我希望我可以提供一個有用的狡辯。是的,這是正確的,
f <- function (exp)
if (exp)
1
else
2
失敗的經典Error: unexpected 'else' in "else"
消息,由於與R未能繼續讀過去1兩種方法已經被正確地主動提出[R繼續閱讀過去的1:
f <- function (exp) {
if (exp)
1
else
2
}
和
f <- function (exp) if (exp) 1 else 2
但有沒有提到第三條路---只要移動else
了一條線。因此,下面的也適用,因爲[R知道要繼續讀過去的1:
f <- function (exp)
if (exp)
1 else
2
我認爲最關鍵的一點是,要麼提振作用的整個身體,或者確保發生在同一行else
if條款的結尾,以便R知道繼續閱讀。這就是單線解決方案的原因。這也是爲什麼這個工程:
f <- function (exp)
if (exp) {
1
} else
2
但這種失敗:
f <- function (exp)
if (exp) {
1
}
else
2
使用該函數體的更標準的支撐,這個工程太:
f <- function (exp) {
if (exp) {
1
}
else
2
}
但是否不是我們正在建設的一個功能是紅鯡魚。重要的是隻有大括號和else
的位置。因此,這些工作:
{
if (exp) {
1
}
else
2
}
if (exp) {
1
} else
2
但這種失敗:
if (exp) {
1
}
else
2
,並在頂部以證明我的說法,1,這個工程:
{
x <- 4
if (exp)
1
else
2
}
我不知道你解釋爲什麼多行'if ... else ...'在函數體內部被解釋爲單個語句。這是因爲當你開始鍵入'f < - function(exp = T){'時,R將繼續讀取,直到整個塊被匹配的'}'關閉。這將允許解釋者發現'else'是剛剛開始的'if'的延續。對? – flodel
@ flodel啊,是的,我可能需要更清楚。但是你的猜想是真實的。並猜測當你移除函數體周圍的大括號時會發生什麼...... ;-) –