最佳答案
所以这是一个很琐碎的问题,但是我不能回答这个问题,这让我很困扰,也许答案会告诉我更多关于 R 是如何工作的细节。
标题说明了一切: R 是如何解析 ->
这个模糊的右侧赋值函数的?
我通常深入研究这个问题的方法失败了:
`->`
错误: 找不到对象
->
getAnywhere("->")
没有发现名为
->
的对象
我们不能直接称之为:
`->`(3,x)
错误: 找不到函数
"->"
当然,这种方法是有效的:
(3 -> x) #assigns the value 3 to the name x
# [1] 3
R 似乎知道如何简单地推翻这个论点,但我认为上述方法肯定能够解决这个问题:
pryr::ast(3 -> y)
# \- ()
# \- `<- #R interpreter clearly flipped things around
# \- `y # (by the time it gets to `ast`, at least...)
# \- 3 # (note: this is because `substitute(3 -> y)`
# # already returns the reversed version)
将其与常规赋值运算符进行比较:
`<-`
.Primitive("<-")
`<-`(x, 3) #assigns the value 3 to the name x, as expected
?"->"
、 ?assignOps
和 语言定义都只是顺便提到它作为正确的赋值操作符。
但 ->
的使用方式显然有其独特之处。它不是函数/操作符(对 getAnywhere
和直接对 `->`
的调用似乎证明了这一点) ,那么它是什么呢?它完全属于自己的类吗?
除了“ ->
在 R 语言的解释和处理方式上是完全独一无二的; 记住并继续前进”之外,还有什么值得我们学习的吗?