[Rd] Generalised piping into operators

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Fri Apr 21 19:00:46 CEST 2023


On 21/04/2023 12:16 p.m., Michael Milton wrote:
> I'm afraid I don't understand. I know that parsing `+`(1, 1) returns a 
> result equivalent to `1 + 1`, but why does that impose a restriction on 
> parsing the pipe operator? What is the downside of allowing arbitrary 
> RHS functions?

I thought the decision to exclude "_ + 1" happens after enough parsing 
has happened so that the code making the decision can't tell the 
difference between "_ + 1" and "`+`(_, 1)".  I might be wrong about 
that, but this suggests it:

   > quote(_ + 1)
   Error in quote("_" + 1) : invalid use of pipe placeholder (<input>:1:0)
   > quote(`+`(_,  1))
   Error in quote("_" + 1) : invalid use of pipe placeholder (<input>:1:0)

On the other hand, this works:

   > quote(x |> `+`(e1 = _, 1))
   x + 1

So maybe `+`() is fine after all.

Duncan Murdoch



More information about the R-devel mailing list