->;(右箭头)和<;-(左箭头)在for循环上
,for循环的->;(右箭头)和<;-(左箭头)在for循环上,r,language-design,R,Language Design,,for循环的返回NULL(如文档所示): 未对->进行注释,->似乎已转换为x) #expression(x)的行为与不同,我认为这更像是一个解析问题 for(i in 1:3) {i+1} -> x 实际上被解析为 for(i in 1:3) { x <- {i+1} } 因此,分配是循环体的一部分。例如,您也可以无错误地运行它 for(i in 1:3) {i+1} ^2 或者看看你从这个表达式中得到了什么 for(i in 1:3) {i+1} + {print(
返回NULL
(如文档所示):
未对->
进行注释,->
似乎已转换为x)
#expression(x)的行为与不同,我认为这更像是一个解析问题
for(i in 1:3) {i+1} -> x
实际上被解析为
for(i in 1:3) {
x <- {i+1}
}
因此,分配是循环体的一部分。例如,您也可以无错误地运行它
for(i in 1:3) {i+1} ^2
或者看看你从这个表达式中得到了什么
for(i in 1:3) {i+1} + {print(i)}
# [1] 1
# [1] 2
# [1] 3
循环体表达式不终止于第一个大括号的末尾。它终止于行的末尾(或者可以使用;
或通过将其嵌套在代码块中来结束)。这在任何方面都不是赋值运算符所独有的
所以这不是一个bug,只是语法有点混乱。你所期望的看起来更像
{for(i in 1:3) {i+1}} -> x
它仍然返回NULL
lobstr::ast(for(i in 1:3) {i+1} -> x)
o-`for`
+-i
+-o-`:`
| +-1
| \-3
\-o-`<-`
+-x
\-o-`{`
\-o-`+`
+-i
\-1
for(i in 1:3) {i+1} ^2
for(i in 1:3) {i+1} + {print(i)}
# [1] 1
# [1] 2
# [1] 3
{for(i in 1:3) {i+1}} -> x