问题 为什么`:=`作为中缀运算符?


为什么以下工作在R?

> `:=` <- function(x, y) x + y
> 1 := 2
[1] 3

我的理解是这样的 % 用户定义的中缀运算符是必需的。是否有其他(可能更容易打字)选项?


1688
2017-09-14 00:13


起源



答案:


这是因为 := 就好像 <- 要么 <<-, 定义为 LEFT_ASSIGN 对于R.的解析器
看到 http://svn.r-project.org/R/trunk/src/main/gram.y

这意味着 := 是一种特殊情况,您也可以不期望任何其他选项可用。


11
2017-09-14 01:15



你可以用荒谬的定义掩盖现有的非%中缀运算符,这很奇怪。 - 42-
对我来说更奇怪的是 := 仅为解析器定义,但定义为 := 缺席。 - kohske
谢谢@kohske。看看那段代码,似乎就是这样 := 是解析器识别的唯一“备用”标记。 - pete
在野外看到 这里。它被用于多重赋值运算符,这是有道理的。 - pete
这也用在了 data.table 包。 - Andrie


答案:


这是因为 := 就好像 <- 要么 <<-, 定义为 LEFT_ASSIGN 对于R.的解析器
看到 http://svn.r-project.org/R/trunk/src/main/gram.y

这意味着 := 是一种特殊情况,您也可以不期望任何其他选项可用。


11
2017-09-14 01:15



你可以用荒谬的定义掩盖现有的非%中缀运算符,这很奇怪。 - 42-
对我来说更奇怪的是 := 仅为解析器定义,但定义为 := 缺席。 - kohske
谢谢@kohske。看看那段代码,似乎就是这样 := 是解析器识别的唯一“备用”标记。 - pete
在野外看到 这里。它被用于多重赋值运算符,这是有道理的。 - pete
这也用在了 data.table 包。 - Andrie