假设我在 R 中有两个自定义中缀运算符:%foo%
和 %bar%
.
我有使用这两个运算符的表达式,例如:
x %foo% y %bar% z
如何确定
%foo%
的运算符优先级和 %bar%
?如何更改优先级,例如,
%bar%
总是在 %foo%
之前执行?在上面的示例中,这将与以下内容相同:x %foo% (y %bar% z)
最佳答案
我不认为这是明确记录的,而是隐含在 R language documentation 中是中缀运算符都具有相同的优先级,因此从左到右执行。这可以证明如下:
`%foo%` <- `+`
`%bar%` <- `*`
1 %bar% 2 %foo% 3
#5
1 %foo% 2 %bar% 3
#9
我能想到的唯一选择是重新定义现有运算符之一来执行您想要的操作。但是,这本身会产生影响,因此您可能希望将其限制在一个函数内。
还值得注意的是,使用
substitute
不会更改第一次编写表达式时已经设置的运算符优先级:eval(substitute(2 + 2 * 3, list(`+` = `*`, `*` = `+`)))
#10
2 * 2 + 3
#7
关于r - 在 R 中,如何确定用户定义的中缀运算符的运算符优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31044891/